hadoop - 如何有效地读取带有 spark 路径的文件,即想要返回 `wholeTextFiles` 的 `RDD[String, Iterator[String]]`

标签 hadoop apache-spark bigdata

大数据中的一个常见问题是将数据转换为大数据友好格式(parquet 或 TSV)。

在当前返回 RDD[(String, String)] (path -> whole file as string) 的 Spark wholeTextFiles 中,这是一种有用的方法,但会导致许多问题当文件很大时(主要是内存问题)。

原则上应该可以使用底层 Hadoop API 编写如下方法

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

其中迭代器是文件(假设换行符作为分隔符)并且迭代器正在封装底层文件读取和缓冲。

在阅读代码一段时间后,我认为解决方案将涉及创建类似于 WholeTextFileInputFormatWholeTextFileRecordReader 的内容。

更新:

经过一些思考,这可能意味着还需要实现一个自定义 org.apache.hadoop.io.BinaryComparable,这样迭代器就可以在随机播放中幸存下来(很难序列化迭代器,因为它有文件句柄)。

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

Spark-Obtaining file name in RDDs

最佳答案

根据 Hyukjin 对 JIRA 的评论,给出了接近想要的东西

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

关于hadoop - 如何有效地读取带有 spark 路径的文件,即想要返回 `wholeTextFiles` 的 `RDD[String, Iterator[String]]`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40739641/

相关文章:

mysql - 我应该使用哪种技术来处理每 30 秒 100 万 * 100 万次计算

java - 如何将参数传递给 Spark 中 mapPartitions 的用户定义函数?

scala - 有没有办法优化 Scala 中连接的 RDD 的分组?

maven - DataTorrent - 开发 Hello World 应用程序

hadoop - Hive 中分区列的顺序重要吗?

hadoop - Hadoop FsImage中的DSQUOTA和NSQUOTA列是什么意思?

hadoop - 无法连接 slave1 :8088 in hadoop 2. 7.2

apache-spark - Pyspark 中是否有等效于 SQL 的 MSCK REPAIR TABLE 的方法

hadoop - 如何在超过3个级别的配置单元中加载嵌套集合

hadoop - Zookeer是hadoop的一部分还是单独配置?