我从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,它给出错误任务不可序列化。
还有其他选择吗?
答案 0 :(得分:0)
您可以使用foreachRDD。它在驱动程序上执行,因此允许rdd操作
transformed.foreachRDD (rdd -> {
String inputPath = doSomethingWithRDD(rdd)
rdd.sparkContext.textFile(inputPath) ...
});
请记住,您无法在转换或操作中创建RDD - 只能在驱动程序上创建RDD。与foreachRDD的例子类似的问题是here。这意味着,你不能在map,filter或foreachPartition中使用SparkContext