以下是查询和样本数据集(实际数据集巨大并且位于HDFS中) 我正在尝试通过以下查询找出数据集1中的差异。 如果可能的话,有没有更好的方法而不使用join?
SELECT
dt1.name,
dt1.code,
dt1.day
FROM
dt1
LEFT OUTER JOIN dt2 ON (dt1.name = dt2.name AND dt1.code = dt2.code AND dt1.day = dt2.day)
WHERE
dt2.name IS NULL AND dt2.code IS NULL AND dt2.day IS NULL
以下是数据集
Data SET 1
name code day
a 1001 2019-01-01
a 1002 2019-01-02
a 1003 2019-01-01
b 2001 2019-01-01
b 2002 2019-01-02
b 2003 2019-01-03
查找给定日期在数据集2中找不到的数据集1的名称代码组合
Data SET 2
name code day
a 1001 2019-01-01
b 1002 2019-01-01
a 1003 2019-01-01
d 2001 2019-01-01
e 2002 2019-01-01
b 2003 2019-01-01
答案 0 :(得分:0)
使用Dataset.except(如果您的数据重复了exceptAll)
val result = dt1.except(dt2) // Ensure that dt1 and dt2 have the same columns
警告:确保两个数据集具有相同的列顺序,否则会产生错误的结果(而不是适当的异常)。
不幸的是,此功能在spark-sql或Imala / Hive中不可用。