有两个具有以下架构的表:
root
|-- USER_ID
|-- FOOD_KEY_1
|-- FOOD_KEY_2
|-- FOOD_KEY_3
|-- FOOD_KEY_4
|-- FOOD_KEY_5
|-- FOOD_KEY_6
root
|-- FOOD_KEY
|-- FOOD
我想将第一个表中的每个键映射到表2中的实际值。
我可以做这样的事情:
table = table1.withColumn('FOOD_1', table1.join(table2, FOOD_KEY_1
== FOOD_KEY,'inner').withColumnRenamed('FOOD', 'FOOD_1'))
.withColumn('FOOD_2', table1.join(table2, FOOD_KEY_2
== FOOD_KEY,'inner').withColumnRenamed('FOOD', 'FOOD_2'))
.....
但是,这似乎不是最理想的。任何更好的建议都会被接受!
答案 0 :(得分:0)
函数始终有助于剥离冗余代码。我认为下面的代码应该可以解决目的。
key_col_df1 = list(set(df1.columns) - {'USER_ID'})
def join_df(left_df, right_df, join_key_left, join_key_right):
return out_df = left_df.join(right_df, col(join_key_left) == col(join_key_right), 'inner')
new_df = df1
for col in key_col_df1:
new_df = join_df(new_df, df2, col, 'FOOD_KEY')
df1是具有所有列的数据帧,而df2是具有映射的数据帧。