Pyspark 按列分区数据并写入 parquet

sji*_*han 3 dataframe apache-spark pyspark

我需要按列中的值在单独的 s3 键中写入镶木地板文件。该列city有数千个值。使用 for 循环进行迭代,按每个列值过滤数据帧,然后写入镶木地板非常慢。有什么方法可以按列对数据帧进行分区city并写入镶木地板文件吗?

我目前正在做的事情——

for city in cities:
  print(city)
  spark_df.filter(spark_df.city == city).write.mode('overwrite').parquet(f'reporting/date={date_string}/city={city}')
Run Code Online (Sandbox Code Playgroud)

sji*_*han 7

partitionBy 函数解决了这个问题

spark_df.write.partitionBy('date', 'city').parquet('reporting')
Run Code Online (Sandbox Code Playgroud)