【发布时间】:2018-09-17 05:15:21
【问题描述】:
我发现默认情况下,Spark 似乎会编写许多小的 parquet 文件。我认为如果我使用分区来减少这种情况可能会更好?
但是我该如何选择分区键呢?例如,对于我经常按 ID 查询的用户数据集,我是否按 id 分区?但我在想,在这种情况下,它会为 1 个用户创建 1 个镶木地板文件吗?
如果我经常按 2 个键查询,但只有 1 个或另一个不能同时查询,那么按两个键分区是否有用?例如,假设我通常通过id 和country 进行查询,我是否使用partitionBy('id', 'country')?
如果没有特定的模式来查询数据但又想限制文件数量,那么我是否使用repartition?
【问题讨论】:
-
partitionBy的输出与repartition不同。partitionBy帮助您创建类似 hive 的分区表结构。另一方面,repartition允许您更改数据帧的分区数,使其等于将要写入的文件数。您还可以将列名传递给repartition。 -
如果我将列名传递给重新分区是否意味着 1 为该列中的每个唯一值获取 1 个文件? @philantrovert
-
那个和
spark.sql.shuffle.partitions的值。如果spark.sql.shuffle.partitions的值大于给定列的不同值,您将得到空分区
标签: apache-spark pyspark parquet