我已经用一种方式对数据进行了分区,我只想用另一种方式对数据进行分区。所以它基本上是这样的:
sqlContext.read().parquet("...").write().partitionBy("...").parquet("...")
我想知道这是否会触发shuffle或所有数据将在本地重新分区,因为在这种情况下,分区只是指HDFS中的一个目录,而来自同一分区的数据不必在同一节点上才能在HDFS的相同目录中写入。
partitionBy
和bucketBy
都不洗牌数据。但是,在某些情况下,首先重新分区数据可能是一个好主意:
df.repartition(...).write.partitionBy(...)
否则,输出文件的数量由分区数*分区列的基数限制。