我在AWS S3中有一堆JSON数据-假设有10万个文件,每个文件约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(...)
这里的“挂起”时间段与以前相同,尽管总体计算速度更快。
所以我不太确定发生了什么或如何诊断。还有其他人碰到这个吗?
答案 0 :(得分:0)
在S3中列出目录树的成本非常高,“分区”。这就是您所经历的。
修复