SPARK SQL LEFT JOIN太多行

时间:2016-08-29 20:04:09

标签: sql apache-spark

使用spark 1.6.1。

有一些奇怪的情况:两个表:timeevents和apps都有密钥id - 设备,当我这样做时:

从timeevents中选择设备 - 返回的记录数为60865

从timeevents中选择distince设备 - 返回的记录数为60865

从应用中选择设备 - 记录:112071

从应用中选择不同的设备 - 记录:112071

我跑的时候:

  

从应用中选择应用。*,timeevents。* LEFT OUTER JOIN timeevents ON   apps.device = timeevents.device

返回的记录数是112073 ......

我检查了 - 输出 - 我有2个额外的行具有相同的设备ID ... 我做错了吗?

我期待112071 - 只是应用表中的数字......

编辑:按建议尝试:

SELECT device FROM timeevents  GROUP BY device  HAVING COUNT(*) > 1
return 0

SELECT device FROM apps GROUP BY device    HAVING COUNT(*) > 1
return 0

SELECT device FROM timeevents  GROUP BY device  HAVING COUNT(1) < 2
return 60865

SELECT device FROM apps GROUP BY device    HAVING COUNT(1) < 2
return 112071

编辑: 抱歉我的错 - 在timeevents设备中没有注意到它(原始RDD)是字符串,在应用程序中很长...仍然没有解释行为但是当我强迫它们在 - 没有更多的神秘行。 UFFF ...

感谢您的帮助!!

1 个答案:

答案 0 :(得分:3)

您的加入不是一对一的。在timeevents表格中查找重复项:

SELECT device
FROM timeevents
GROUP BY device
HAVING COUNT(*) > 1;