大數據中的一個常見問題是將數據轉換爲大數據友好格式(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'?它爲您提供行分片和流出箱。 –