簡體   English   中英

Spark Streaming DStream元素與RDD

[英]Spark Streaming DStream element vs RDD

我正在使用Spark的Streaming API,我只是想更好地了解如何最佳設計代碼。

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

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

Spark Streaming提供了稱為離散流或DStream的高級抽象,它表示連續的數據流。 可以根據來自Kafka,Flume和Kinesis等來源的輸入數據流來創建DStream,也可以通過對其他DStream應用高級操作來創建DStream。 在內部,DStream表示為RDD序列。

本質上,我想對DStream中的每個元素應用一組函數。 目前,我正在為pyspark.streaming.DStream使用“地圖”功能。 根據文檔,我的方法似乎是正確的。 http://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.DStream

map(f,servesPartitioning = False)通過將函數應用於DStream的每個元素來返回新的DStream。

我應該使用map還是正確的方法是將功能/轉換應用於RDD(因為DStream使用RDD)?

foreachRDD(func)對此DStream中的每個RDD應用一個函數。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM