加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 读取tar.gz存档中压缩的多个文件到Spark [复制]

发布时间:2020-12-16 18:17:32 所属栏目:安全 来源:网络整理
导读:参见英文答案 Read whole text files from a compression in Spark????????????????????????????????????2个 我正在尝试从压缩成tar的几个json文件创建Spark RDD. 例如,我有3个文件 file1.jsonfile2.jsonfile3.json 这些包含在archive.tar.gz中. 我想从json
参见英文答案 > Read whole text files from a compression in Spark????????????????????????????????????2个
我正在尝试从压缩成tar的几个json文件创建Spark RDD.
例如,我有3个文件

file1.json
file2.json
file3.json

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

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

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

UPDATE

使用Read whole text files from a compression in Spark的答案中给出的方法,我能够运行,但这种方法似乎不适合大型tar.gz存档(> 200 mb压缩),因为应用程序会在大型存档大小上窒息.由于我正在处理的一些档案在压缩后达到了2 GB的大小,我想知道是否有一些有效的方法来处理这个问题.

我试图避免提取档案然后合并文件,因为这将是耗时的.

解决方法

在 Read whole text files from a compression in Spark中给出了解决方案.
使用提供的代码示例,我能够从压缩存档创建数据框,如下所示:

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档案相对).

请参阅:stuartsierra.com/2008/04/24/a-million-little-files

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读