两者之间是否有任何区别
df.write.partitionBy("year", "month", "day").parquet("/my/path/on/hdfs")
和
df.drop("year", "month", "day").write.parquet("/my/path/on/hdfs/year=2019/month=8/day=12")
(当我知道年,月和日的值是(2019/8/12)时)
答案 0 :(得分:2)
Approach 1. df.write.partitionBy("year", "month", "day").parquet("/my/path/on/hdfs")
Approach 2. df.drop("year", "month", "day").write.parquet("/my/path/on/hdfs/year=2019/month=8/day=12")
取决于SaveMode,这两个语句之间可能有所不同。
默认情况下,SaveMode为ErrorIfExists
。因此,如果您在/my/path/on/hdfs
处有一些数据,尽管您在/my/path/on/hdfs/year=2019/month=8/day=12
上可能没有任何数据,那么Approach_1将失败,而Approach_2将起作用。
如果使用SaveMode Overwrite
,则Approach_1将删除/my/path/on/hdfs
中存在的所有数据,并且只会在/my/path/on/hdfs/year=2019/month=8/day=12
内部创建新数据。但是Approach_2不会删除/my/path/on/hdfs/
中的其他分区数据。