scala—在rdd中嵌套使用sc.textfile

v09wglhw  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(539)

我需要使用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() 设置?
提前谢谢!

ebdffaop

ebdffaop1#

我认为这是完成这类任务的最佳方法。你的用例需要它!
必须将其收集为列表,否则必须在rdd中创建rdd,这在spark的当前实现中是不可能的。
有关为什么不能在rdd中创建rdd的更多信息,请参见:
激发谷歌小组讨论
Spark嵌套dd
因此,这是一种最佳的方法,不过我可以建议您使用堆外内存在内存中存储大型对象

相关问题