我需要使用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()
设置?
提前谢谢!
1条答案
按热度按时间ebdffaop1#
我认为这是完成这类任务的最佳方法。你的用例需要它!
必须将其收集为列表,否则必须在rdd中创建rdd,这在spark的当前实现中是不可能的。
有关为什么不能在rdd中创建rdd的更多信息,请参见:
激发谷歌小组讨论
Spark嵌套dd
因此,这是一种最佳的方法,不过我可以建议您使用堆外内存在内存中存储大型对象