当我尝试将DStream.transform与ssc.checkpiont一起使用时:
initRDD = sc.parallelize(list('aeiou')).map(lambda x: (x, 100)).persist()
ssc = StreamingContext(sc, batchDuration=3)
ssc.checkpoint('checkpoint')
lines = ssc.socketTextStream('localhost', 9999)
items = lines.flatMap(lambda x: x.split())
counts = items.countByValue().transform(lambda x:x.join(initRDD)).mapValues(sum)
counts.pprint()
有一个例外:
您似乎正在尝试广播RDD或引用 来自行动或转型的RDD。 RDD转换和操作 只能由驱动程序调用,而不能在其他内部调用 变换;例如,rdd1.map(lambda x:rdd2.values.count()* x)因为值转换和计数动作无效 无法在rdd1.map转换中执行。更多 信息,请参阅SPARK-5063。
但如果我评论ssc.checkpoint:
# ssc.checkpoint('checkpoint')
代码也可以正常工作