【发布时间】:2021-09-22 11:41:18
【问题描述】:
我有一个非规范化用例 - 一个 hive avro 事实表与 14 个较小的维度表连接并生成一个非规范化 parquet 输出表。输入事实表和输出表都以相同的方式分区(Category=TEST1,YearMonthId=202101)。而且我确实运行历史处理,这意味着一次处理和加载给定类别的几个月。
我正在使用 Spark 2.4.0/pyspark 数据帧,所有表连接的广播连接,动态分区插入,最后使用 colasce 来控制输出文件的数量。 (在最后阶段看到随机播放可能是因为动态分区插入)
想知道对管理分区可能进行的优化 - 比如说从输入到输出阶段保持分区一致,这样就不会涉及洗牌。想要利用输入和输出存储表由相同的列分区这一事实。
我也在考虑这个问题 - 通过确定分区并并行写入分区来使用静态分区写入 - 这有助于加快速度还是避免洗牌?
感谢任何能引导我走向正确方向的帮助。
【问题讨论】:
标签: apache-spark pyspark hive apache-spark-sql