我在Spark中有2个数据帧。它们都有一个唯一的id。 结构如下
df1:
id_df1 values
abc abc_map_value
cde cde_map_value
fgh fgh_map_value
df2:
id_df2 array_id_df1
123 [abc, fgh]
456 [cde]
我想获得以下数据帧结果:
result_df:
id_df2 array_values
123 [map(abc,abc_map_value), map(fgh,fgh_map_value)]
456 [map(cde,cde_map_value)]
我可以使用spark sql这样做,但我不认为它是最有效的方式,因为ID是唯一的。
有没有办法在内存中存储键/值字典,以便根据键查找值而不是进行连接?它会比加入更有效吗?
答案 0 :(得分:0)
如果将df2分解为键值对,则连接变得简单,只需要一个groupBy。
您可以尝试其他聚合&减少更高的效率/并行化
df2
.select('id_df2, explode('array_id_df1).alias("id_df1"))
.join(df1, usingColumn="id_df1")
.groupBy('id_df2)
.agg(collect_list(struct('id_df1, 'values)).alias("array_values"))