Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 将数据集分区与表分区方案对齐_Apache Spark_Partitioning - Fatal编程技术网

Apache spark 将数据集分区与表分区方案对齐

Apache spark 将数据集分区与表分区方案对齐,apache-spark,partitioning,Apache Spark,Partitioning,我正在给一张按月分区的桌子写信。我知道我的数据是≈每个分区100MB,没有扭曲-它将适合单个HDFS块,我希望确保每个分区都写入一个文件。我还知道数据集中的确切月数(介于1和10之间),因此: ds.repartition(nMonths, $"month").write.<options>.insertInto(<...>) ds.repartition(nMonths,$“month”).write..insertInto() 这很有效。然而我从这里开始思考。。。

我正在给一张按月分区的桌子写信。我知道我的数据是≈每个分区100MB,没有扭曲-它将适合单个HDFS块,我希望确保每个分区都写入一个文件。我还知道数据集中的确切月数(介于1和10之间),因此:

ds.repartition(nMonths, $"month").write.<options>.insertInto(<...>)
ds.repartition(nMonths,$“month”).write..insertInto()
这很有效。然而我从这里开始思考。。。由于Spark使用key的散列来确定分区,我不能保证每个分区都会收到一个月的数据。我拥有的分区越多,这种情况就越不可能发生-对吗

那么,将分区数增加到不同键数之上有意义吗

ds.repartition(nMonths * 3, $"month").write.<options>.insertInto(<...>)
ds.repartition(nMonths*3,$“月”).write..insertInto()

很多分区都是空的,但这应该不会太痛苦(应该吗?),我们正在降低一些不走运的分区获得3/4倍数据的概率,从而增加总体执行时间。这有意义吗?关于这个因素有什么经验法则吗?或者任何其他方法来达到同样的效果?

如果您想要超级安全,您可以使用以下方法:

ds.repartitionByRange(nMonths,$"month").write...

通过这种方式,您也不会有空分区,这反过来意味着您也不会在HDFS中生成零大小的文件。

酷,我很惊讶地看到它还能很好地处理像201907..202006这样的范围(从
Int
的角度来看,这里有一个201913..201999的间隙)。