我要处理数以千计的大文件。 我试图并行读取这些文件,然后将它们中的每一个转换为DataFrame,以便我可以聚合数据并提取数字特征等。
我尝试了sc.wholeTextFiles(),它为我们提供了文件名和内容元组RDD,但是我不允许使用sparkContext / sqlContext来创建RDD映射中的数据帧。
val allFiles = sc.wholeTextFiles(inputDir)
val rows = allFiles.map {
case (filename, content) => {
val s = content.split("\n")
// Convert the content to RDD and dataframe later
//val r = sc.parallelize(s); <-- Serialization Error
}
}
访问sc关于抛出序列化错误,因为我们不应该sc任务。
我也考虑过:
val input = sc.textFile(inputDir)
input.mapPartitions(iter => <process partition data>)
但是采用上述方法,当文件很大时,它会分成几个分区,而且我无法将文件作为“整体”进行处理
还有其他选项我可以并行处理整个文件,转换每个数据帧等吗?