我有以下代码:
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中只看到一个任务。可能是什么原因?
答案 0 :(得分:2)
自从你打电话给coalesce(1)
以来,这是预料之中的。根据{{3}},它将返回一个DataFrame,其中包含指定的分区数(在您的情况下为1)。如果你希望heavy_processing
分布更多,但是想要写出一个文件然后使用repartition(1)
,那么它会引入一个shuffle边界,并将第一个阶段留在100个分区。