【问题标题】:Load hive partitioned table to Spark Dataframe将 hive 分区表加载到 Spark Dataframe
【发布时间】: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


【解决方案1】:

使用hiveContext.sql("Select * from tableName where pt='2012.07.28.10'")

其中,pt= partitionKey,在您的情况下为 year_week 以及对应的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    相关资源
    最近更新 更多