SPARK SQL左连接行太多
使用spark 1.6.1 有一些奇怪的情况:两个表:timeevents和apps都有密钥id-device,当我这样做时: 从timeevents中选择设备-返回的记录数为60865 选择distince device from timeevents-返回的记录数为60865 从应用程序中选择设备-记录:112071 从应用程序中选择不同的设备-记录:112071 当我跑步时: 选择应用程序。SPARK SQL左连接行太多,sql,apache-spark,Sql,Apache Spark,使用spark 1.6.1 有一些奇怪的情况:两个表:timeevents和apps都有密钥id-device,当我这样做时: 从timeevents中选择设备-返回的记录数为60865 选择distince device from timeevents-返回的记录数为60865 从应用程序中选择设备-记录:112071 从应用程序中选择不同的设备-记录:112071 当我跑步时: 选择应用程序。*,时间事件。*从应用程序左外连接时间事件打开 apps.device=timeevents.dev
*
,时间事件。*
从应用程序左外连接时间事件打开
apps.device=timeevents.device
返回的记录数为112073
并且我签入了输出-我有两条额外的线具有相同的设备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
按计数(*)大于1的设备从timeevents组中选择设备
返回0
按计数(*)大于1的设备从应用程序组中选择设备
返回0
按计数(1)<2的设备从timeevents组中选择设备
返回60865
按计数(1)<2的设备从应用程序组中选择设备
返回112071
编辑:
对不起,我的错误-在timeevents设备中没有注意到它(因为最初的RDD)是字符串,在应用程序中是长的。。。仍然不能解释这种行为,但当我强迫他们在两行中都做长的时候——不再有额外的神秘行了。ufff
谢谢你的帮助 您的加入不是一对一。在
timeevents
表中查找重复项:
SELECT device
FROM timeevents
GROUP BY device
HAVING COUNT(*) > 1;
该设备必须有2个应用程序记录。它也必须发生在其他地方,因为您正在从另一个设备获取额外的记录我不是spark中最好的…但是从timeevents组中逐个选择count(1)>1的设备应该会为您提供重复的设备条目