【发布时间】:2020-04-19 20:04:22
【问题描述】:
我正在写入按月分区的表。我知道我的数据约为每个分区 100MB,没有偏差——它将适合单个 HDFS 块,我想确保每个分区都写入一个文件。我也知道我的数据集中的确切月数(介于 1 到 10 之间),因此:
ds.repartition(nMonths, $"month").write.<options>.insertInto(<...>)
这行得通。但是我从这里开始考虑......由于 Spark 使用密钥的哈希来确定分区,我不能保证每个分区都会收到一个月的数据。我拥有的分区越多,这实际上就越不可能 - 对吧?
那么将分区数增加到不同键数以上是否有意义?
ds.repartition(nMonths * 3, $"month").write.<options>.insertInto(<...>)
很多分区将是空的,但这不应该是那么痛苦(应该吗?),我们正在降低一些不幸的分区获得 3x/4x 数据的可能性,从而增加整体执行时间。这有意义吗?关于这个因素有什么经验法则吗?或者任何其他方法可以达到同样的效果?
【问题讨论】: