【发布时间】:2016-07-15 22:06:10
【问题描述】:
我正在使用Spark 1.4.1 版本。我正在尝试将已分区的 Hive 表加载到 DataFrame 中,其中 Hive 表由 year_week 数字分区,在这种情况下我可能有 104 个分区。
但我可以看到 DataFrame 正在将数据加载到 200 个分区中,我知道这是由于 spark.sql.shuffle.partitions 默认设置为 200。
我想知道是否有任何好的方法可以将我的 Hive 表加载到具有 104 个分区的 Spark Dataframe 中,并确保在 Dataframe 加载时间本身期间 Dataframe 按year_week 编号进行分区。
我期望的原因是我将很少对大容量表进行连接,所有表都由year_week 数字分区。因此,将 Dataframe 按year_week 编号分区并相应地加载将节省大量时间,无需使用year_week 编号重新分区。
如果您对我有任何建议,请告诉我。
谢谢。
【问题讨论】:
-
你试过
df.repartition($"year_week")吗? -
是的,我能做到。但是重新分区会导致数据洗牌,这在我的情况下成本更高。因此,我尝试查看一种在加载时间本身期间使用 Hive 表的相同分区加载 Dataframe 的方法。我试图做到这一点以避免在 Dataframe 上重新分区。有没有我可以用 Dataframe 初始化的分区策略?
-
我现在明白了。我什么都不知道。我们最终将每个分区加载为单独的 DataFrame,然后重新分区并简单地合并帧。通过这种方式,我们以某种方式将重新分区限制为单个工作人员。
标签: hadoop apache-spark hive apache-spark-sql spark-dataframe