У меня есть два фрейма данных, которые большие 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: Также надеюсь, что решение сможет масштабироваться для больших данных
Спасибо