首页 文章

Spark Streaming DStream元素与RDD

提问于
浏览
0

我正在使用Spark的Streaming API,我只想更好地理解如何最好地设计代码 .

我目前正在使用pyspark.streaming.kafka.createDirectStream中的Kafka Consumer(在pyspark中)

根据http://spark.apache.org/docs/latest/streaming-programming-guide.html

Spark Streaming提供称为离散流或DStream的高级抽象,表示连续的数据流 . DStream可以从来自Kafka,Flume和Kinesis等源的输入数据流创建,也可以通过在其他DStream上应用高级操作来创建 . 在内部,DStream表示为一系列RDD .

本质上,我想将一组函数应用于DStream中的每个元素 . 目前,我正在为pyspark.streaming.DStream使用"map"函数 . 根据文档,我的方法似乎是正确的 . http://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.DStream

map(f,preservesPartitioning = False)通过将函数应用于DStream的每个元素来返回一个新的DStream .

我应该使用map,还是正确的方法是将函数/转换应用于RDD(因为DStream使用RDD)?

foreachRDD(func)将一个函数应用于此DStream中的每个RDD .

更多文档:http://spark.apache.org/docs/latest/api/python/pyspark.streaming.html

1 回答

  • 1

    DirectStream.map 在这里是正确的选择 . 关于 map

    stream.map(f)
    

    相当于:

    stream.transform(lambda rdd: rdd.map(f))
    

    另一方面 DirectStream.foreachRDD 是一个输出动作并创建一个输出 DStream . 与 foreachRDD 一起使用的函数不会返回任何内容,与方法本身相同 . 很明显,看看Scala签名:

    def foreachRDD(foreachFunc: RDD[T] => Unit): Unit
    

相关问题