2016-11-22 32 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()") 
相關問題