我正在读取一个火花数据框,该数据框存储在本地群集的HDFS上的镶木地板格式中。镶木地板数据分为约96,000个单独的文件。现在我知道理想情况下数据不会分成很多小文件,但是现在我必须以这种格式处理它。我正在使用pyspark v2.2.0。
当我运行spark.read.parquet(data_root)
时,会发生一些奇怪的事情:spark会依次生成一系列作业,每个作业大约有2000个任务。它产生了48个这样的工作,每个工作都有一个阶段。在这48个工作中,它只执行大约96,000个任务 - 我认为它为每个镶木地板文件运行任务。每项工作只需2秒钟即可运行。
我觉得奇怪的是,这不会发生在96,000个任务的一个工作中,因为那会更快(没有阶段边界)。 2000年的数字来自哪里?是否有一个参数我可以调整以强迫更多这些微小的任务进入同一个工作,从而加速了事情?
答案 0 :(得分:1)
这是Spark2.0的新功能。 FileSourceStrategy组合较小的镶木地板文件以生成更大的文件,以便它可以以优化的方式工作。理想情况下,每个spark执行器都希望处理相当于HDFS块大小(128MB)的块大小。