在RDD中嵌套使用sc.textFile

时间:2016-10-22 17:40:11

标签: scala apache-spark

我需要使用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 个答案:

答案 0 :(得分:0)

我认为这是完成此类任务的最佳方法。它是你想要它的用例!

您必须将其作为列表收集,否则您必须在RDD中创建RDD,这在当前的Spark实现中是不可能的。

有关我们无法在RDD中创建RDD的更多信息,请参阅:

  1. Spark-Google-Group Discussion

  2. SPARK-NestedRDD

  3. 因此,这是一种最佳方法,但我可以建议您可以使用OFFHeap内存将大型对象存储在内存中