重新分区后不合并

时间:2019-06-14 18:30:44

标签: apache-spark pyspark apache-spark-sql

我想在计算时增加很多任务,但是在写入表时合并为较小的一组分区。

下面给出了一个简单的演示示例,其中在执行过程中不支持重新分区。

我的预期输出是,映射操作发生在100个分区中,最后收集仅发生在10个分区中。

Spark似乎通过忽略分区来优化执行。有人可以解释如何实现我的预期行为会很有帮助。

sc.parallelize(range(1,1000)).repartition(100).map(lambda x: x*x).coalesce(10).collect()

Stages Output

2 个答案:

答案 0 :(得分:0)

使用分区代替合并,有助于实现预期的行为。

editText.onTextChanged { text -> /* do something */ }

Repartition

这有助于解决我的问题。但是,仍然希望对此行为做出解释。

答案 1 :(得分:0)

“返回一个新的数据集,该数据集具有精确的numPartitions分区,当(多个)请求的分区更少时。如果请求的分区数量较大,它将保留在当前的分区数量上。”

来源:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.Dataset@coalesce(numPartitions:Int):org.apache.spark.sql.Dataset[T]