gpt4 book ai didi

scala - 将压缩在 tar.gz 存档中的多个文件读入 Spark

转载 作者:行者123 更新时间:2023-12-04 12:18:16 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Read whole text files from a compression in Spark

(2 个回答)


5年前关闭。




我正在尝试从压缩成 tar 的几个 json 文件创建一个 Spark RDD。
例如,我有 3 个文件

file1.json
file2.json
file3.json

这些都包含在 archive.tar.gz 中.

我想从 json 文件创建一个数据框。问题是 Spark 没有正确读取 json 文件。使用 sqlContext.read.json("archive.tar.gz") 创建 RDD或 sc.textFile("archive.tar.gz")导致乱码/额外输出。

有没有办法在 Spark 中处理包含多个文件的 gzip 压缩文件?

更新

使用对 Read whole text files from a compression in Spark 的回答中给出的方法我能够让事情运行起来,但是这种方法似乎不适合大型 tar.gz 文件(> 200 mb 压缩),因为应用程序会因大型文件大小而窒息。作为一些文件,我正在处理高达 的范围大小2 GB 压缩后我想知道是否有一些有效的方法来处理这个问题。

我试图避免提取文件然后将文件合并在一起,因为这会很耗时。

最佳答案

Read whole text files from a compression in Spark中给出了解决方案.
使用提供的代码示例,我能够创建一个 DataFrame从压缩文件像这样:

val jsonRDD = sc.binaryFiles("gzarchive/*").
flatMapValues(x => extractFiles(x).toOption).
mapValues(_.map(decode())

val df = sqlContext.read.json(jsonRDD.map(_._2).flatMap(x => x))
此方法适用于相对较小的 tar 文件,但不适用于较大的文件大小。
该问题的更好解决方案似乎是将 tar 存档转换为 Hadoop SequenceFiles ,它们是可拆分的,因此可以在 Spark 中并行读取和处理(与 tar 存档相反。)
见: A Million Little Files – Digital Digressions by Stuart Sierra .

关于scala - 将压缩在 tar.gz 存档中的多个文件读入 Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38635905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com