需要減少以下包含多個 if else 陳述句的 python 代碼的計算。代碼在 DataBricks 上運行,所以我也對 Pyspark Solutions 持開放態度。目前這段代碼需要 1 個多小時才能運行。所以任何幫助將不勝感激。
unique_list_code:列中的唯一代碼串列,concat_df['C_Code']用于過濾包含代碼的資料幀行。
concat_df:Pandas DataFrame 有 400 萬條記錄
unique_list_code = list(concat_df['C_Code'].unique())
MC_list =[]
SN_list =[]
AN_list = []
Nothing_list =[]
for i in range(0,len(unique_list_code)):
print(unique_list_code[i])
code_filtered_df = concat_df[concat_df['C_Code'] == unique_list_code[i]]
#SN_Filter:
SN_filter = code_filtered_df[(code_filtered_df['D_Type'] == 'SN') & (code_filtered_df['Comm_P'] == 'P-mail')]
if len(SN_filter)>0:
print("Found SN")
SN_list.append(unique_list_code[i])
clean_up(SN_filter)
else:
#AN_Filter
AN_filter = code_filtered_df[(code_filtered_df['D_Type'] == 'AN') & (code_filtered_df['Comm_P'] == 'P-mail')]
if len(AN_filter)>0:
print("Found AN")
AN_list.append(unique_list_code[i])
clean_up(AN_filter)
else:
#MC_Check
MF_filter = code_filtered_df[code_filtered_df['MC_Flag'] =='Y' ]
MF_DNS_filter = MF_filter[~(((MF_filter['D_Type'] == 'AN')| (MF_filter['D_Type'] =='SN')) & (MF_filter['Comm_P'] == 'DNS'))]
if len(MF_DNS_filter)>0:
print("Found MC")
MC_list.append(unique_list_code[i])
clean_up(MF_DNS_filter)
else:
print("Nothing Found")
Nothing_list.append(unique_list_code[i])
```
uj5u.com熱心網友回復:
花費這么長時間的原因是您正在使用 Pandas DF
如果您想從分布式計算中受益并提高性能,則在這種情況下需要使用 Spark 資料幀:
Spark_DF = spark.createDataFrame(Pandas_DF)
您需要在 PySpark 中重寫代碼才能使用 Spark DF
uj5u.com熱心網友回復:
如上所述,您需要在 pyspark 中重寫此代碼。Pyspark 允許您通過集群上的作業節點分發資料。
from pyspark.sql.functions import col
filter_condition = (((col('D_Type') == 'SN' & col('Comm_P') == 'P-mail')) OR ((col('D_Type') == 'AN' & col('Comm_P') == 'P-mail')) OR (...))
result_df = concat_df.where(filter_condition)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346394.html
上一篇:是否可以在R中繪制下圖?
