在 PySpark 的 JOIN 中创建列并用作连接键

Create column and use as join key inside of JOIN in PySpark

我想创建一个列用作连接内部的连接键,例如:

df1.join(df2
        .withColumn('NewDF2Column', SOME_OPERATION)),
        df1['key'] = df2['NewDF2Column'], how = 'left'))

PySpark 永远找不到用作连接键的 NewDF2Column。如果我首先在另一个数据框中创建它,它会起作用,但不是像这样动态地创建它。可能吗?谢谢!

Dataframes 是不可变的,这意味着您需要每次重新分配变量才能从中获取结果。在这种情况下,您在 join 操作的第一个参数上创建了 NewDF2Column,但是您再次引用 NewDF2Column 的第二个参数看不到之前所做的更改。如何解决?

第一个选项

# Creating before joining
df2 = df2.withColumn('NewDF2Column', SOME_OPERATION)

output_df = df1.join(df2, df1['key'] = df2['NewDF2Column'], how='left')

第二个选项

# Creating a column to join with the same name as df1
output_df = df1.join(df2.withColumn('key', SOME_OPERATION), on='key', how='left')