2016-11-22 65 views
1

大数据中的一个常见问题是将数据转换为大数据友好格式(parquet或TSV) 。如何高效地读取spark中的路径文件,即希望`wholeTextFiles`返回`RDD [String,Iterator [String]]`

在Spark wholeTextFiles当前返回RDD[(String, String)](路径 - >整个文件作为字符串)是一个有用的方法,但是当文件很大(主要是内存问题)时会导致很多问题。

原则上它应该是可能的使用底层Hadoop的API

def wholeTextFilesIterators(path: String): RDD[(String, Iterator[String])] 

当迭代是文件(假定换行符作为分隔符)和迭代器封装底层文件阅读如下写方法&缓冲。

通过代码阅读了一段时间后,我认为解决方案将涉及创建类似于WholeTextFileInputFormatWholeTextFileRecordReader的东西。

UPDATE:

经过一番思考这可能意味着还实现自定义org.apache.hadoop.io.BinaryComparable所以迭代器可以生存洗牌(很难连载迭代器,因为它有文件句柄)。

又见https://issues.apache.org/jira/browse/SPARK-22225

+1

给出为什么不使用Hadoop的纯'TextInputFormat'?它为您提供行分片和流出箱。 –

回答

0

按Hyukjin的评论对JIRA,一些接近什么都想通过

spark.format("text").read("...").selectExpr("value", "input_file_name()") 
相关问题