我有两个数据帧,它们是大型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