如何将每个Spark Streaming迭代数据存储到一个RDD?

时间:2017-01-14 16:23:47

标签: apache-spark pyspark apache-kafka spark-streaming rdd

我是Spark的新手。 我正在编写以下脚本来接收来自Kafka的流,然后将其转换为RDD。

我的目标是将内存中每个流迭代的数据存储到一个RDD。就像在每个循环中向列表添加元素一样。

conf = SparkConf().setAppName("Application")
sc = SparkContext(conf=conf)

def joinRDDs(rdd):
     elements = rdd.collect()
     rdds = sc.parallelize(elements)
     transformed = rdds.map(lambda x: ('key', {u'name': x[1]}))

if __name__ == '__main__':
    ssc = StreamingContext(sc, 2)
    stream = KafkaUtils.createDirectStream(ssc, [topic],{"metadata.broker.list": host})
    stream.foreachRDD(joinRDDs)

我该如何做到这一点?

感谢您的关注

1 个答案:

答案 0 :(得分:0)

使用updateStatebyKey()并根据需要传入函数。函数需要两个参数,每个批次中都包含新数据,以及您在内存中保存的历史数据。

def countPurchasers(newValues,lastSum):         如果lastSum为None:             lastSum = 0         返回总和(newValues,lastSum)

updateStatebBykey(countPurchasers)