如何在Palantir Foundry代码工作簿中按3个关联列JOIN两个数据集
Palantir Foundry Code Workbook 多条件JOIN实现方案
默认你已将两个目标数据集导入Code Workbook并加载为PySpark DataFrame,分别命名为df1、df2。以下是两种常用实现方式:
方式1:直接拼接多关联条件
适用于不需要处理重复列名的场景,直接把所有关联条件写在join的第二个参数中:
假设两个同名关联列是col_a、col_b,df1中第三个关联列是col_c,df2中对应的第三个关联列是col_d,示例代码如下:
from pyspark.sql import functions as F # 可根据需求调整how参数为left、right、full等连接类型 joined_df = df1.join( df2, (df1.col_a == df2.col_a) & (df1.col_b == df2.col_b) & (df1.col_c == df2.col_d), how="inner" )
方式2:重命名异名列后批量关联
如果需要让关联列在结果中只保留一份,可先将不同名的关联列重命名为一致,再传入列名列表关联:
# 将df2的异名关联列重命名为和df1一致 df2_renamed = df2.withColumnRenamed("col_d", "col_c") # 直接传入同名关联列列表,结果中关联列只会保留一份 joined_df = df1.join( df2_renamed, on=["col_a", "col_b", "col_c"], how="inner" )
注意事项
- 如果两个数据集存在非关联的重名列,建议关联前给对应列加前缀避免结果列名冲突,示例如下:
# 给df1非关联列加前缀 df1 = df1.select( *[F.col(c).alias(f"df1_{c}") for c in df1.columns if c not in ["col_a", "col_b", "col_c"]], "col_a", "col_b", "col_c" ) # 给df2非关联列加前缀 df2 = df2.select( *[F.col(c).alias(f"df2_{c}") for c in df2.columns if c not in ["col_a", "col_b", "col_d"]], "col_a", "col_b", "col_d" )
- 关联前可先检查关联列的数据类型是否一致,避免隐式转换导致关联失败。
内容的提问来源于stack exchange,提问作者confused101
相关产品推荐
相关产品推荐

