如何有效地读取spark中路径为的文件,即需要返回rdd[string,iterator[string]]`

1mrurvl1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(410)

大数据中的一个常见问题是将数据转换成大数据友好的格式(Parquet地板或tsv)。
Spark wholeTextFiles 现在又回来了 RDD[(String, String)] (path->wholefile as string)是一种很有用的方法,但是当文件很大时会导致很多问题(主要是内存问题)。
原则上,应该可以使用底层hadoopapi编写如下方法

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

其中迭代器是文件(假定换行符作为分隔符),迭代器封装底层文件读取和缓冲。
在阅读了代码一段时间之后,我认为解决方案应该包括创建类似于 WholeTextFileInputFormat 以及 WholeTextFileRecordReader .
更新:
经过深思熟虑,这可能意味着还需要实现一个定制 org.apache.hadoop.io.BinaryComparable 因此迭代器可以在洗牌中生存(由于迭代器有文件句柄,很难序列化迭代器)。
另请参见https://issues.apache.org/jira/browse/spark-22225
spark在rdds中获取文件名

7fhtutme

7fhtutme1#

根据玄真对圣战的评论,一些接近所需的东西是由神给予的

spark.format("text").read("...").selectExpr("value", "input_file_name()")

相关问题