调用并行化的numSlices被

时间:2018-01-12 00:16:54

标签: apache-spark pyspark

我有以下代码:

index = sc.parallelize(range(1000), 100)
huge_rows = index.map(heavy_processing)
schema = StructType([StructField('f1', BinaryType(), False), StructField('f2', BinaryType(), False)])

bbox2d_dataframe = spark.createDataFrame(huge_rows, schema)
bbox2d_dataframe = bbox2d_dataframe.coalesce(1)
bbox2d_dataframe.write.option("compression", "none").mode('overwrite').parquet('/tmp/huge/')

我希望将处理并行化为100个任务(因为在并行化调用中numSlices = 100), 这样可以更好地并行化heavy_processing。 但是,我在SparkUI中只看到一个任务。可能是什么原因?

enter image description here

1 个答案:

答案 0 :(得分:2)

自从你打电话给coalesce(1)以来,这是预料之中的。根据{{​​3}},它将返回一个DataFrame,其中包含指定的分区数(在您的情况下为1)。如果你希望heavy_processing分布更多,但是想要写出一个文件然后使用repartition(1),那么它会引入一个shuffle边界,并将第一个阶段留在100个分区。