[英]pySpark join dataframe on multiple columns
我正在使用下面的代碼在兩個數據幀之間加入和刪除重復項。 但是,得到錯誤AnalysisException: Detected implicit cartesian product for LEFT OUTER join between logical plans...Either: use the CROSS JOIN syntax to allow cartesian products between these relations, or: enable implicit cartesian products by setting the configuration variable spark.sql.crossJoin.enabled=true;
我的 df1 有 15 列,我的 df2 有 50 多列。 如何在不硬編碼要加入的列的情況下加入多個列?
def join(dataset_standardFalse, dataset, how='left'):
final_df = dataset_standardFalse.join(dataset, how=how)
repeated_columns = [c for c in dataset_standardFalse.columns if c in dataset.columns]
for col in repeated_columns:
final_df = final_df.drop(dataset[col])
return final_df
具體的例子,當比較數據框的列時,它們將有多個共同的列。 我可以加入cols
列表嗎? 我需要避免硬編碼名稱,因為 cols 會因大小寫而異。
cols = set(dataset_standardFalse.columns) & (set(dataset.columns))
print(cols)
如果兩個數據框中都存在IIUC,您可以直接加入多個列
#This gives you the common columns list from both the dataframes
cols = list(set(dataset_standardFalse.columns) & (set(dataset.columns)))
#Modify your function to specify list of columns for join condition
def join(dataset_standardFalse, dataset, how='left'):
cols = list(set(dataset_standardFalse.columns) & (set(dataset.columns)))
final_df = dataset_standardFalse.join(dataset, cols, how=how)
repeated_columns = [c for c in dataset_standardFalse.columns if c in dataset.columns]
for col in repeated_columns:
final_df = final_df.drop(dataset[col])
return final_df
當您在連接條件中傳遞列列表時,列應該出現在兩個數據框中。 如果該列不存在,那么您應該在預處理步驟中重命名該列或動態創建連接條件。
對於動態列名,請使用:
#Identify the column names from both df
df = df1.join(df2,[col(c1) == col(c2) for c1, c2 in zip(columnDf1, columnDf2)],how='left')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.