如何将JavaDStream转换为RDD?或者有没有办法在JavaDStream的map函数中创建新的RDD?

时间:2017-01-10 10:29:18

标签: java apache-spark rdd

我从kafka获取的流数据是hdfs文件的路径,我需要获取该文件的数据。

iterate = test.map(lambda p:(p.survey_date,p.pro_catg,p.metric_id))  
   v = iterate.map(lambda (survey_date,pro_catg,metric_id): metric_id)
   print (v.collect())  

这里input.getPath()是文件的hdfs路径。

没有收集JavaDstream Object的选项,否则我会首先收集数据而不是从文件中获取数据。

我无法在地图功能中创建新的RDD,它给出错误任务不可序列化。

还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

您可以使用foreachRDD。它在驱动程序上执行,因此允许rdd操作

transformed.foreachRDD (rdd -> {
    String inputPath = doSomethingWithRDD(rdd)
    rdd.sparkContext.textFile(inputPath) ...
});

请记住,您无法在转换或操作中创建RDD - 只能在驱动程序上创建RDD。与foreachRDD的例子类似的问题是here。这意味着,你不能在map,filter或foreachPartition中使用SparkContext