scala - 高级连接两个数据框 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
实现这种加入的最佳方式是什么?
解决方案
我已经更新了下面的代码
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
您只需要拆分值并通过分解它来生成多行,然后与其他数据框连接。
您可以参考此链接,如何将管道分隔的列拆分为多行?
推荐阅读
- javascript - 捕获 waitForSelector 错误
- arrays - 分段错误 Core Dumped X86 Assembly Array
- c# - 如何等待带有回调的外部响应?
- javascript - 如何计算同一天的持续时间?
- google-cloud-platform - 用于 DataFlow 和 DataPrep 的 ZONE_RESOURCE_POOL_EXHAUSTED
- r - R Bass Diffusion 使用 nls() 和预测器
- objective-c - 如何从 Objective-C 调用 Swift 可变参数方法?
- sql - 从 LEFT JOIN 中仅检索一条记录
- php - 在PHP中获取给定中心纬度/经度的圆的外部坐标
- c++ - 模板类的不同对象的通用接口