【发布时间】:2018-07-15 12:08:28
【问题描述】:
我有一个包含以下详细信息的 DataFrame。
|id|Name|Country|version|
|1 |Jack|UK |new |
|1 |Jack|USA |old |
|2 |Rose|Germany|new |
|3 |Sam |France |old |
我想创建一个 DataFrame,如果数据基于“id”重复,它会选择 new version 而不是 old 版本如此
|id|Name|Country|version|
|1 |Jack|UK |new |
|2 |Rose|Germany|new |
|3 |Sam |France |old |
在 Java/Spark 中执行此操作的最佳方法是什么,或者我是否必须使用某种嵌套 SQL 查询?
简化的 SQL 版本如下所示:
WITH new_version AS (
SELECT
ad.id
,ad.name
,ad.country
,ad.version
FROM allData ad
WHERE ad.version = 'new'
),
old_version AS (
SELECT
ad.id
,ad.name
,ad.country
,ad.version
FROM allData ad
LEF JOIN new_version nv on nv.id = ad.id
WHERE ad.version = 'old'
AND nv.id is null
),
SELECT id, name, country, version FROM new_version
UNION ALL
SELECT id, name, country, version FROM old_version
【问题讨论】:
-
所以你最多只有一个“新”记录和一个“旧”记录?不可能有几个“老”?
标签: java scala apache-spark dataframe apache-spark-sql