我需要使用Spark基于查询另一个索引来处理大量文本文件中的数据。我可以针对小案例执行此操作(通过将RDD转换为数组/参见下文),但是我很难设置它以正确处理大量数据。
我有这个:
val rootPath = "..."
val ndxRDD = sc.textFile(rootPath + "index/2016-09-01*")
def ndxToDoc(articleName: String): String = { sc.textFile(rootPath + articleName).first(); }
// works
val artcilesArr = ndxRDD.collect().map(ndxToDoc);
val articlesRDD = sc.parallelize(articlesArr)
// does not work
// val articlesRDD = ndxRDD.map(ndxToDoc)
articlesRDD.count()
我认为问题在于我正在尝试读取rdd中的文件。如果没有中间collect()
- map -> textFile()
- parallelize()
设置,我如何才能完成上述工作?
提前致谢!
答案 0 :(得分:0)
我认为这是完成此类任务的最佳方法。它是你想要它的用例!
您必须将其作为列表收集,否则您必须在RDD中创建RDD,这在当前的Spark实现中是不可能的。
有关我们无法在RDD中创建RDD的更多信息,请参阅:
因此,这是一种最佳方法,但我可以建议您可以使用OFFHeap内存将大型对象存储在内存中