pyspark Spark Partition:为了利用性能分区,我是否需要在查询中使用分区列?

gcuhipw9  于 12个月前  发布在  Spark
关注(0)|答案(1)|浏览(101)

我在Spark中有一个表,用一个列year_month进行分区(例如2020-01,2020-02),但是所有的查询都是用一个不同的列来完成的,year_month是派生日期(例如2020-01-30,2020-02-28)。
每个月只有一条记录,日期列是所有查询中使用的列,year_month在任何地方都没有使用。
主要的问题是,在这种情况下,它将作为一个分区来提高性能,还是在每个查询中读取所有表,因为日期不是分区列。

cwtwac6a

cwtwac6a1#

是的,您需要将partitionBy列作为查询过滤器中的一列添加,以使它们有效。Spark无法知道日期和分区列严格相关。
你可以做的是添加一个过滤条件,例如从日期派生,但在任何情况下,你必须指定year_month列。
您可以通过myQuery.explainPlan API(这里是SQL API的参考,但其他语言也是如此)来探索它的使用。
在这里,您将看到所涉及的分区数量(如果使用正确的过滤器,则应该是一个),所涉及的parquet文件数量,以及有关查询及其执行的其他有趣信息。
解释SQL:https://spark.apache.org/docs/latest/sql-ref-syntax-qry-explain.html
解释Scala:https://spark.apache.org/docs/latest/api/scala/org/apache/spark/sql/Dataset.html#explain(extended:Boolean):单位

相关问题