2016-08-29 2 views
1

spark 1.6.1 사용. TimeEvent에를 둘 다 키 ID가 애플 리케이션 - 내가 할 때, 장치 : 두 개의 테이블 : SPARK SQL LEFT JOIN 너무 많은 행

이 이상한 상황을 가지고

선택 장치를 TimeEvent에에서 - 반환 된 레코드의 수는 TimeEvent에에서 60,865

선택 distince 장치입니다 - 반환 된 레코드의 수는 애플 리케이션에서 60,865

선택 장치입니다 - 기록 : 112,071

앱에서 별개의 장치를 선택 - 기록 : 112,071

나는 실행하면

앱을 선택합니다. *, timeevents. * 응용 프로그램에서 LEFT OUTER은 apps.device = timeevents.device

반환 된 레코드의 수는 112,073입니다

ON TimeEvent에 가입하세요 ...

내가 확인 - 출력 - 나는 같은 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로) 문자열이었습니다. 앱에서 Long ...은 여전히 ​​동작을 설명하지 않지만 둘 다 Long이되도록 강제 할 때 - 더 이상의 신비한 행은 없습니다. ufff ...

도움 주셔서 감사합니다!

+0

해당 기기에는 2 개의 앱 레코드가 있어야합니다. 다른 장치에서 추가 레코드를 얻고 있기 때문에 다른 곳에서도 일어나야합니다. – VikingBlooded

+1

나는 스파크가 최고는 아니지만 ... counte (1)> 1 인 장치로 timeevents 그룹의 장치를 선택하면 중복 된 기기 항목 – Twelfth

답변

3

귀하의 참여가 일대일이 아닙니다. timeevents 테이블에서 중복 된 항목을 찾습니다.

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