我在AWS S3中有一堆JSON数据 - 让我们说100k文件,每个大约5MB - 我正在使用Spark 2.2 DataFrameReader来读取和处理它们:
sparkSession.read.json(...)
我发现Spark在开始计算之前只会挂起5分钟左右。对于较大的数据集,这可能需要数小时。当我说“挂起”时,我的意思是终端可视化指示群集正在处理的阶段以及沿着它的距离不会出现 - 据我所知,它在某些阶段之间。
Spark在此期间做了什么,我怎样才能帮助它更快?
我有两个想法,但它们似乎都是错的。
我的第一个想法是Spark试图列出它需要进行计算的所有文件。我通过实际创建脱机文件列表并直接将它们提供给Spark而不是使用glob语法来测试它:
val fileList = loadFiles()
sparkSession.read.json(fileList:_*)
这实际上导致“悬挂”时期持续更长时间!
我的第二个想法是Spark正在利用这段时间为所有数据创建一个模式。但我通过手动指定架构来排除这种情况:
val schema = createSchema()
sparksession.read.schema(schema).json(...)
这里的“悬挂”时期与以前相同,但整体计算要快得多。
所以我不确定发生了什么或如何诊断它。
在S3中列出目录树的成本非常高,“分区”。这就是您所经历的。
修复
更少,更大的文件
较浅的目录树
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。