增加或减少聚合的分区?
Posted
技术标签:
【中文标题】增加或减少聚合的分区?【英文标题】:Increase or decrease partitions for an aggregation? 【发布时间】:2017-08-10 23:53:57 【问题描述】:我不确定在进行聚合操作时是否应该增加或减少分区数。假设我正在使用 pyspark 数据框。 pyspark 1.6.1
.
我知道通常行转换需要更多的分区。并且将数据保存到磁盘通常需要更少的分区。
但是,对于聚合,我不清楚在 pyspark
中做什么??
增加分区数量的论据:由于我们必须对聚合数据进行混洗,因此您希望混洗更少的数据,从而增加分区数量,以减小分区的大小。
减少分区数量的参数:IT 需要大量开销来收集和计算每个分区。因此,过多的分区会导致过多的开销,并且 pyspark 作业可能会超时。
是哪一个?
来源:https://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-2/
【问题讨论】:
【参考方案1】:这取决于,
根据问题使用用户定义的分区会使事情变得更容易,而其他事情会更难一些。但这就是我已经拥有的经验。
设置更多分区
当出现聚合函数和数据丰富时,我使用了这种方法。默认数据分区发生了什么。因此,我遇到了 OOM 错误和其他一些问题。因此,我的数据丰富聚合使用的内存超出了我的工作人员所能支持的范围。解决方案是增加该步骤的分区数量并解决了我的问题,但由于 shuffle 和其他东西,它需要更多的执行时间。
设置更少的分区
这个案例是关于 shuffle 时间的,我有一个 Cassandra 和 spark 集群,并且使用 datasax 连接器我试图从具有 200 个默认分区的 Cassandra 读取一些数据。但是所有数据都在同一台机器上,当我进行一个简单的聚合时,这会造成很多混乱。所以我减少了分区,它减少了洗牌时间。
结论
您需要了解您的数据以及您想要做什么。数据处理没有魔法。您需要检查您需要做什么以及如何做。这将有助于选择要做什么,或者增加或减少分区。
【讨论】:
你能告诉我更多关于“设置更多分区”的情况吗? “丰富数据”是什么意思? 关于数据的丰富就像这样。您有一个日期为 1988-10-10 的数据集,但您需要有关该日期的更多信息,因此您需要获取星期几和其他内容,以便您将更多数据添加到您自己的数据中以丰富它。关于添加更多分区你可以使用很少的东西,你可以设置repartition
函数或者在reduceByKey
你可以设置分区的数量或者你可以在这里找到spark.apache.org/docs/latest/…设置默认并行度的配置spark.default.parallelism
所以它基本上就像 pyspark 中的withColumn
。这被认为是数据丰富?
是的,您在任何类型的数据中添加的每个附加信息,或从其他地方检索某些信息以“丰富”您的数据都被视为数据丰富。
一般来说,似乎增加分区数比较好以上是关于增加或减少聚合的分区?的主要内容,如果未能解决你的问题,请参考以下文章
centos7.0 增加/usr分区的容量减少home分区的大小