Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SPARK SQL左连接行太多_Sql_Apache Spark - Fatal编程技术网

SPARK SQL左连接行太多

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

使用spark 1.6.1

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

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

选择distince device from timeevents-返回的记录数为60865

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

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

当我跑步时:

选择应用程序。
*
,时间事件。
*
从应用程序左外连接时间事件打开 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的设备应该会为您提供重复的设备条目