我有一个用例,在这个用例中我需要以查找的方式连接两个表。我怎样才能做到这一点是Spark?表a:键类型1type2type3alk1nak1nak2nak3alk2nak4nak5nak6表b:密钥数据alk1alk2g2nak1g3nak2g4nak3g5nak4g6nak5g7nak6g8结果:键数据alk1g1、g3、g4、g5alk2g2、g6、g7、g8
1tuwyuhd1#
你可以使用 array_contains 然后goupby和collect列的列表 data :
array_contains
data
val result = dfA.as("a") .withColumn("keys", array(dfA.columns.map(col): _*)) .join( dfB.as("b"), array_contains(col("keys"), col("b.Key")) ).groupBy("a.Key") .agg( concat_ws(",", collect_list(col("data"))).as("data") ) result.show //+----+-----------+ //| Key| data| //+----+-----------+ //|ALK1|G1,G3,G4,G5| //|ALK2|G2,G6,G7,G8| //+----+-----------+
1条答案
按热度按时间1tuwyuhd1#
你可以使用
array_contains
然后goupby和collect列的列表data
: