如何使用Spark在读取时将数据分布到X分区?



我试图用Spark DF从Hive读取数据,并将其分发到特定的可配置分区数量(与核心数量相关)。我的工作非常简单,它不包含任何连接或聚合。我已经阅读了spark.sql.shuffle.partitions属性,但文档说:

配置用于连接或聚合的数据转移时使用的分区数量。

这是否意味着配置这个属性对我来说是无关紧要的?还是将读操作视为洗牌操作?如果不是,还有什么替代方案?重分区和合并似乎有点矫枉过正。

为了验证我对你的问题的理解,你想要增加在读取数据后立即创建的rdd/dataframe中的分区数量。

在这种情况下,你之后的属性是spark.sql.files.maxPartitionBytes,它控制最大的数据可以推入一个分区(请参阅https://spark.apache.org/docs/2.4.0/sql-performance-tuning.html)默认值为128 MB,可以覆盖该值以提高并行性。

Read本身并不是shuffle。你需要在某个阶段获得数据。

可以使用下面的答案,或者Spark的算法在读取时设置分区数。

您没有说明您使用的是RDD还是DF。使用RDD,您可以设置num分区。使用DF,通常需要在读取后重新分区。

当你注意到连接或聚合时,你关于控制并行性的观点不太相关。

最新更新