大数据中的一个常见问题是将数据转换为大数据友好格式(parquet或TSV) 。如何高效地读取spark中的路径文件,即希望`wholeTextFiles`返回`RDD [String,Iterator [String]]`
在Spark wholeTextFiles
当前返回RDD[(String, String)]
(路径 - >整个文件作为字符串)是一个有用的方法,但是当文件很大(主要是内存问题)时会导致很多问题。
原则上它应该是可能的使用底层Hadoop的API
def wholeTextFilesIterators(path: String): RDD[(String, Iterator[String])]
当迭代是文件(假定换行符作为分隔符)和迭代器封装底层文件阅读如下写方法&缓冲。
通过代码阅读了一段时间后,我认为解决方案将涉及创建类似于WholeTextFileInputFormat
和WholeTextFileRecordReader
的东西。
UPDATE:
经过一番思考这可能意味着还实现自定义org.apache.hadoop.io.BinaryComparable
所以迭代器可以生存洗牌(很难连载迭代器,因为它有文件句柄)。
又见https://issues.apache.org/jira/browse/SPARK-22225
给出为什么不使用Hadoop的纯'TextInputFormat'?它为您提供行分片和流出箱。 –