簡體   English   中英

使用並行處理按列值拆分和保存 Pyspark 數據幀

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM