新手求问,用 spark 怎么读取 hdfs 上 zip 文件和 tar.gz 文件

2018-12-14 09:53:21 +08:00
 qqq8724

要求不解压,直接读取,而且需要按压缩包内文件目录分层分区,求大神解疑

2345 次点击
所在节点    问与答
8 条回复
luny
2018-12-14 10:12:35 +08:00
不懂 spark 和 hdfs,但是觉得这个需求和 2 者没有关系,应该是自行实现的。
比如找到 tar.gz 文件,用 tar tf 可以遍历内容。
capric
2018-12-14 10:33:54 +08:00
douglas1997
2018-12-14 10:43:46 +08:00
用类似 mxnet 的 rec 吧
qqq8724
2018-12-14 11:16:48 +08:00
@capric @douglas1997 @luny 感谢你们的回答 这个需求是确实要用到 spark 和 hdfs 的 目前看来#2 的回答很接近,正在分析 :)
fxxkgw
2018-12-14 11:46:04 +08:00
我碰到一个问题,hdfs 挂载到本机目录,python 起多进程,读 hdfs 下一个简单的文件,有概率导致挂载的 hdfs 进程占用 CPU 100%, hdfs hang 住。
kex0916
2018-12-14 13:49:24 +08:00
要按照压缩包文件目录分层分区要在 driver 侧就能拿到目录结构然后划分 partitions,然后每个 partition 读取该目录下的数据,但是压缩文件默认一般都是不 splitable 的,每个 partition 读取的时候也得完全解开后读取该分区的指定目录,这样各个分区都会有重复的工作。我建议是:
driver 侧将 tar.gz 先解压到临时目录,多个压缩文件可以按文件路径下发 task 来分布式解压,得到解压后的临时目录后,自己重写 FileInputFormat 来划分 split 然后采用 newAPIhadoopRDD 或者自己实现 RDD,按照临时目录下的目录来划分分区,执行完后把临时目录删除。
至于你说的不解压直接读,只要读还是得解压吧,可能只是在内存中完成解压而没有写到磁盘上。
qqq8724
2018-12-14 18:05:39 +08:00
@kex0916 哈哈,又是你,我上一次问的问题你就回答过,很感谢,你这个方法很有道理,我会试试的
kex0916
2018-12-14 20:55:00 +08:00
@qqq8724 😀

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/517419

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX