[英]Pyspark dataframe splitting and saving by column values by using Parallel Processing
我有一個非常大的 pyspark 數據框,我正在嘗試按日期和庫存名稱將其拆分為多個數據框,並根據日期/庫存將它們保存到鑲木地板中。
stock date time spread time_diff
VOD 01-01 9:05 0.01 0:07
VOD 01-01 9:12 0.03 0:52
VOD 01-02 10:04 0.02 0:11
VOD 01-02 10:15 0.01 0:10
VOD 01-02 10:04 0.02 0:11
VOD 01-02 10:15 0.01 0:10
VOD 01-03 10:04 0.02 0:11
VOD 01-03 10:15 0.01 0:10
BAT 01-01 10:25 0.03 0:39
BAT 01-01 11:04 0.02 22:00
BAT 01-02 9:04 0.02 0:05
BAT 01-02 10:15 0.01 0:10
BAT 01-02 10:25 0.03 0:39
BAT 01-03 11:04 0.02 22:00
BAT 01-04 9:04 0.02 0:05
BAT 01-04 10:15 0.01 0:10
BOA 01-01 10:25 0.03 0:39
BOA 01-01 11:04 0.02 22:00
BOA 01-02 9:04 0.02 0:05
BOA 01-02 10:25 0.03 0:39
BOA 01-03 11:04 0.02 22:00
BOA 01-03 9:04 0.02 0:05
並保存不同日期的庫存,例如
my_path/01-01/VOD/VOD.parquet
my_path/01-01/BAT/BAT.parquet
....
my_path/01-02/VOD/VOD.parquet
my_path/01-02/BAT/BAT.parquet
my_path/01-03/VOD/VOD.parquet
my_path/01-03/BAT/BAT.parquet
我知道如何循環執行此操作
def split_save(df):
spark = create_spark_session()
data_list = df.select('date').distinct().unique()
data_list = [v['date'] for v in date_list]
stock_list = df.select('stock').distinct().unique()
stock_list = [v['stock'] for v in stock_list ]
for date in date_list:
for stock in stock_list:
stock_df = df.filter((f.col('date')==date) & (f.col('stock')==stock))
stock_df.write.parquet(f"{my_path}/{date}/{stock}", mode='overwrite')
但是,上述過程將需要 10 多個小時。 我想進行多處理以加速。
任何想法 ?
謝謝 !
寫入時使用默認 partitionby 選項有什么問題
stocks_df.write.format("parquet").partitionBy("date","stock").save(f"{my_path}")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.