【问题标题】:What is the difference between bucketBy and partitionBy in Spark?Spark中的bucketBy和partitionBy有什么区别?
【发布时间】:2021-08-08 11:19:58
【问题描述】:

比如我要保存一个表,这两种策略有什么区别?

bucketBy:

someDF.write.format("parquet")
      .bucketBy(4, "country")
      .mode(SaveMode.OverWrite)
      .saveAsTable("someTable")

partitionBy:

someDF.write.format("parquet")
      .partitionBy("country") # <-- here is the only difference
      .mode(SaveMode.OverWrite)
      .saveAsTable("someTable")

我猜,bucketBy 在第一种情况下会创建 4 个包含国家/地区的目录,而 partitionBy 将在“国家/地区”列中创建与唯一值一样多的目录。理解正确吗?

【问题讨论】:

标签: apache-spark hadoop pyspark hdfs partitioning


【解决方案1】:

一些区别:

我猜,bucketBy 在第一种情况下会创建 4 个包含国家/地区的目录,而 partitionBy 将在“国家/地区”列中创建与唯一值一样多的目录。理解正确吗?

是的,对于partitionBy。但是bucketBy 将创建 4 个存储桶文件(默认为 Parquet)。

【讨论】:

    【解决方案2】:

    与 Apache Hive 中的分桶不同,Spark SQL 根据存储桶和分区的数量创建存储桶文件。换句话说,分桶文件的数量是桶的数量乘以任务编写者的数量(每个分区一个)。

    您还可以将 bucketBy 与 partitionBy 一起使用,这样每个分区(多级分区的最后一级分区)将拥有“n”个存储桶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 2010-12-28
      • 1970-01-01
      相关资源
      最近更新 更多