将一个表中的键映射到另一个表中的值

时间:2018-07-09 03:17:45

标签: apache-spark pyspark apache-spark-sql

有两个具有以下架构的表:

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'))
 .....

但是,这似乎不是最理想的。任何更好的建议都会被接受!

1 个答案:

答案 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是具有映射的数据帧。

相关问题