首页 > 解决方案 > 高级连接两个数据框 spark scala

问题描述

我必须加入两个数据框。

示例:Dataframe1 看起来像这样

df1_col1      df1_col2
   a            ex1
   b            ex4
   c            ex2
   d            ex6
   e            ex3

数据框2

df2_col1      df2_col2
   1           a,b,c
   2           d,c,e
   3           a,e,c

在结果数据框中,我想得到这样的结果

res_col1      res_col2       res_col3
    a           ex1             1
    a           ex1             3
    b           ex4             1
    c           ex2             1
    c           ex2             2
    c           ex2             3
    d           ex6             2
    e           ex3             2
    e           ex3             3

实现这种加入的最佳方式是什么?

标签: scalajoinapache-spark-sqlapache-spark-dataset

解决方案


我已经更新了下面的代码

val df1 = sc.parallelize(Seq(("a","ex1"),("b","ex4"),("c","ex2"),("d","ex6"),("e","ex3")))
val df2 = sc.parallelize(Seq(List(("1","a,b,c"),("2","d,c,e")))).toDF
df2.withColumn("df2_col2_explode", explode(split($"_2", ","))).select($"_1".as("df2_col1"),$"df2_col2_explode").join(df1.select($"_1".as("df1_col1"),$"_2".as("df1_col2")), $"df1_col1"===$"df2_col2_explode","inner").show

您只需要拆分值并通过分解它来生成多行,然后与其他数据框连接。

您可以参考此链接,如何将管道分隔的列拆分为多行?


推荐阅读