【发布时间】:2019-10-08 12:36:31
【问题描述】:
如何根据列中项目数的计数对 DataFrame 进行分区。假设我们有一个包含 100 人的 DataFrame(列是 first_name 和 country),我们想为一个国家/地区的每 10 人创建一个分区。
如果我们的数据集包含 80 个人来自中国、15 个人来自法国和 5 个人来自古巴,那么我们将需要 8 个中国分区、2 个法国分区和 1 个古巴分区。
以下代码不起作用:
-
df.repartition($"country"): 这样会为中国创建一个分区,为法国创建一个分区,为古巴创建一个分区 -
df.repartition(8, $"country", rand):这会为每个国家创建最多8个分区,所以应该为中国创建8个分区,但是法国和古巴的分区未知。法国可以分为 8 个分区,古巴最多可以分为 5 个分区。有关详细信息,请参阅this answer。
这是repartition() 文档:
当我查看 repartition() 方法时,我什至没有看到采用三个参数的方法,所以看起来有些行为没有记录在案。
有没有办法动态设置每列的分区数?这将使创建分区数据集更加容易。
【问题讨论】:
-
关于 3 个参数,
$"country", rand在第二次调用中作为partitionExprs一起使用
标签: apache-spark