Pyspark databricks按周划分的分区日期

Pyspark databricks按周划分的分区日期,pyspark,partitioning,azure-databricks,Pyspark,Partitioning,Azure Databricks,我是databricks新手,正在尝试创建分区。我有3列可用于分区,即名称、值和日期。所需的条件是日期的分区应为每周。 我做过这样的事情: df\ .write\ .format("delta")\ .partitionBy(["name","value" and "date"]). .save(writePath) 我不知道如何按周划分日期?我遇到了repartitionByRange,但不确定如何申请我的条件?

我是databricks新手,正在尝试创建分区。我有3列可用于分区,即名称、值和日期。所需的条件是日期的分区应为每周。 我做过这样的事情:

df\
.write\
.format("delta")\
.partitionBy(["name","value" and "date"]).
.save(writePath)

我不知道如何按周划分日期?我遇到了
repartitionByRange
,但不确定如何申请我的条件?

您可以从
日期
列创建新列
,并在分区中使用它们:

from pyspark.sql import functions as F

df.withColumn("week", F.weekofyear("date")) \
.withColumn("year", F.year("date")) \
.write \
.format("delta") \
.partitionBy("year", "week") \
.save(writePath)

请注意,仅周数是不够的,因为它还取决于年份。

除了日期之外,我还有两个其他字段。我可以将它们添加为.partitionBy(“年”、“周”、“名称”、“值”)?将列太多作为分区将生成太多的小文件。在Databrick上,您可以通过索引它们(所谓的数据跳过)、应用ZOrder等来提高性能@Van_jss是的,您可以添加它们,但这取决于您的用例,正如Alex所强调的,避免有这么多分区,您将没有任何好处,更糟糕的是,您可能会降低性能。