在Apache Spark(Scala)上获取两个数据帧的差异



我有两个数据帧,它们是大型csv文件,我正在Spark(Scala(中读取到数据帧中

第一个数据帧有点像

key| col1 | col2  |
-------------------
1  | blue | house |
2  | red  | earth | 
3  | green| earth |
4  | cyan | home  | 

第二个数据帧有点像

key| col1 | col2  | col3
-------------------
1  | blue | house | xyz
2  | cyan | earth | xy
3  | green| mars  | xy

我想得到像这样的差异的共同键&不同数据帧中的公共列(键类似于主键(

key| col1         | col2           |
------------------------------------
1  | blue         | house          |
2  | red --> cyan | earth          | 
3  | green        | home--> mars   | 

以下是我迄今为止的方法:

//read the files into dataframe
val src_df = read_df(file1)
val tgt_df = read_df(file2) 
//truncate dataframe to only contain common keys
val common_src = spark.sql(
"""
select * 
from src_df src
where src.key IN(
select tgt.key
from tgt_df tgt
"""
val tgt_common = spark.sql(
"""
select * 
from tgt_df tgt
where tgt.key IN(
select src.key
from src_df src
"""
//merge both the dataframes
val joined_df = src_common.join(tgt_common, src_common(key) === tgt_common(key), "inner")

我试图做一些类似的事情,但没有成功

joined_df
.groupby(key)
.apply(some_function(?))

我试着查找网上发布的现有解决方案。但我没能得到想要的结果。

PS:也希望该解决方案能够扩展到大数据

感谢

尝试以下操作:

spark.sql(
"""
select 
s.id, 
if(s.col1 = t.col1, s.col1, s.col1 || ' --> ' || t.col1) as col1,
if(s.col2 = t.col2, s.col2, s.col2 || ' --> ' || t.col2) as col2
from src_df s
inner join tgt_df t on s.id = t.id
""").show

相关内容

  • 没有找到相关文章

最新更新