PySpark에 가입하면 예기치 않은 결과가 발생합니다.

Eplambert

Python 버전 3.5와 함께 Spark 버전 2.0.0을 사용하고 있습니다. GroupID와 ID라는 두 개의 열이있는 상위 테이블이 있습니다. 데이터를 3 개의 하위 집합으로 나눌 필요가 있으므로 계층화 된 샘플링을 사용하고 있습니다.

서브 세트 (샘플 A)를 얻으면 왼쪽 조인을 수행하고 샘플 A ID가 null인지 확인합니다. 예상 출력은 샘플 A의 ID를 포함하지 않는 상위 테이블의 서브 세트입니다.

spark = SparkSession.builder.enableHiveSupport().appName("myApp").getOrCreate()

data = [(0, 100), (0, 101), (0, 102), (0, 103), (0, 1000), (1, 104), (1,105), (1, 106), (1, 107), (1, 1007)]
df = spark.createDataFrame(data, ['group', 'id'])

## Stratified Sampling
fractions = dict((int(item), 0.45) for item in np.arange(0,(2)))
sampled_for_A = df.sampleBy("group", fractions, seed=7)
sampled_for_A.orderBy("id").show()

## Version 1

sampled_for_BC = df.join(sampled_for_A, df.id == sampled_for_A.id, "left_outer").select(df.group, df.id, sampled_for_A.group.alias("groupA"), sampled_for_A.id.alias("id_A"))
sampled_for_BC.where(sampled_for_BC.id_A.isNull()).show()

버전 1에서는 BC 테이블이 채워지지만 상위 테이블의 값이 복사됩니다.

Group A
+-----+----+
|group|  id|
+-----+----+
|    0| 101|
|    0| 102|
|    1| 104|
|    1| 105|
|    1| 107|
|    0|1000|
+-----+----+

BC
+-----+----+------+----+
|group|  id|groupA|id_A|
+-----+----+------+----+
|    1| 107|     1| 107|
|    0| 103|     0| 103|
|    1| 104|     1| 104|
|    0|1000|     0|1000|
|    1| 106|     1| 106|
|    0| 100|     0| 100|
|    1| 105|     1| 105|
|    1|1007|     1|1007|
|    0| 101|     0| 101|
|    0| 102|     0| 102|
+-----+----+------+----+

버전 2 createOrReplaceTempView 및 SQL 쿼리로 LEFT JOIN 수행하면 예상 결과가 반환됩니다.

df.createOrReplaceTempView("parentTable")
sampled_for_A.createOrReplaceTempView("groupA")

subset_BC = spark.sql(''' 
SELECT a.group,
   a.id,
   b.group AS group_A,
   b.id AS id_A
FROM parentTable a
LEFT JOIN groupA b
ON a.id = b.id
WHERE b.id IS NULL
''').show()

예상대로 :

BC
+-----+----+-------+----+
|group|  id|group_A|id_A|
+-----+----+-------+----+
|    0| 103|   null|null|
|    1| 106|   null|null|
|    0| 100|   null|null|
|    1|1007|   null|null|
+-----+----+-------+----+

내가 놓친 버전 1의 where 절은 무엇입니까? (또한 내 데이터에는 1 억 개의 행이 있고 버전 2에서 수행 된 SQL 왼쪽 조인도 이상하게 작동합니다. 또한 그룹 열에서 다시 분할하려고 시도했습니다.) 모든 통찰력을 높이 평가합니다.

마리우스

join버전 1은 OK이지만, 다음 선택 재정의 데이터에 합류했다. 이는 idgroup열이 동일한 데이터 프레임 ( df) 에서 가져 오기 때문에 기본적으로 df.group == sampled_for_A.group.

원하는 동작을 얻으려면 조인하기 전에 열에 별칭을 지정해야합니다. 예를 들면 다음과 같습니다.

>>> sampled_for_A_aliased = sampled_for_A \
...     .select(sampled_for_A.id.alias('id_A'), sampled_for_A.group.alias('groupA'))
>>> df.join(sampled_for_A_aliased, df.id == sampled_for_A_aliased.id_A, "left_outer").show()
+-----+----+----+------+                                                        
|group|  id|id_A|groupA|
+-----+----+----+------+
|    1| 107|null|  null|
|    0| 103|null|  null|
|    1| 104| 104|     1|
|    0|1000|1000|     0|
|    1| 106| 106|     1|
|    0| 100|null|  null|
|    1| 105| 105|     1|
|    1|1007|null|  null|
|    0| 101| 101|     0|
|    0| 102| 102|     0|
+-----+----+----+------+

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java에서 배치 파일을 실행하면 예기치 않은 결과가 발생합니다.

분류에서Dev

NSDictionary를 [NSDictionary]에 추가하면 예기치 않은 결과가 발생합니다.

분류에서Dev

WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

분류에서Dev

WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

분류에서Dev

함수 내에서 malloc 및 realloc을 호출하면 예기치 않은 결과가 발생합니다.

분류에서Dev

PHP에서 MySQL 행 목록을 호출 (루핑)하면 예기치 않은 결과가 발생합니다.

분류에서Dev

어레이를 다른 어레이에 저장하면 예기치 않은 결과가 발생합니까?

분류에서Dev

$ or 연산자가 mongodb에서 작동하지 않아 예기치 않은 결과가 발생합니다.

분류에서Dev

$ or 연산자가 mongodb에서 작동하지 않아 예기치 않은 결과가 발생합니다.

분류에서Dev

"%"로 작업하면 예기치 않은 결과가 발생합니다.

분류에서Dev

C # 후기 평가로 인해 Dictionary.Add ()에서 예기치 않은 결과가 발생합니다.

분류에서Dev

numpy 배열을 빼면 예기치 않은 결과가 발생합니다.

분류에서Dev

OpenCV Mat를 나누면 예기치 않은 결과가 발생합니다.

분류에서Dev

다음과 같이 sum ()에서 SQL 변수를 사용하면 sum (@wokao) 예기치 않은 결과가 발생합니다.

분류에서Dev

Php를 사용하여 MYSQL 데이터베이스에서 주석을 가져 오면 예기치 않은 JSON 결과가 발생합니다.

분류에서Dev

스트림 sorted ()로 인해 예기치 않은 결과가 발생합니다.

분류에서Dev

for 루프로 인해 예기치 않은 결과가 발생합니다.

분류에서Dev

GMP와 함께 C ++에서 RSA를 사용하여 파일을 해독하려고하면 예기치 않은 결과가 발생합니다.

분류에서Dev

바이너리 구조를 파일에 쓰면 예기치 않은 결과가 발생합니까?

분류에서Dev

문자에서 문자열을 선언하면 예기치 않은 결과가 발생합니다. 왜 그렇습니까?

분류에서Dev

react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

분류에서Dev

react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

분류에서Dev

클래스 인스턴스 사전에 객체를 저장하면 예기치 않은 결과가 발생합니다.

분류에서Dev

음의 정수를 반대로하면 예기치 않은 결과가 발생합니다.

분류에서Dev

복식 배열을 인쇄하면 예기치 않은 결과가 발생합니다.

분류에서Dev

두 NSDate 개체의 동등성을 비교하면 예기치 않은 결과가 발생합니다.

분류에서Dev

Java Socket에서 예기치 않은 오류가 발생합니다.

분류에서Dev

SonarQube Jacoco JUnit : SonarScanner에 예기치 않은 문제가 많이 발생합니다.

분류에서Dev

주어진 크기와 X / Y POS로 VB.NET에서 원을 그리면 예기치 않은 결과가 발생합니다.

Related 관련 기사

  1. 1

    Java에서 배치 파일을 실행하면 예기치 않은 결과가 발생합니다.

  2. 2

    NSDictionary를 [NSDictionary]에 추가하면 예기치 않은 결과가 발생합니다.

  3. 3

    WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

  4. 4

    WHERE 절에서 AND와 OR를 혼합하면 예기치 않은 결과가 발생합니다.

  5. 5

    함수 내에서 malloc 및 realloc을 호출하면 예기치 않은 결과가 발생합니다.

  6. 6

    PHP에서 MySQL 행 목록을 호출 (루핑)하면 예기치 않은 결과가 발생합니다.

  7. 7

    어레이를 다른 어레이에 저장하면 예기치 않은 결과가 발생합니까?

  8. 8

    $ or 연산자가 mongodb에서 작동하지 않아 예기치 않은 결과가 발생합니다.

  9. 9

    $ or 연산자가 mongodb에서 작동하지 않아 예기치 않은 결과가 발생합니다.

  10. 10

    "%"로 작업하면 예기치 않은 결과가 발생합니다.

  11. 11

    C # 후기 평가로 인해 Dictionary.Add ()에서 예기치 않은 결과가 발생합니다.

  12. 12

    numpy 배열을 빼면 예기치 않은 결과가 발생합니다.

  13. 13

    OpenCV Mat를 나누면 예기치 않은 결과가 발생합니다.

  14. 14

    다음과 같이 sum ()에서 SQL 변수를 사용하면 sum (@wokao) 예기치 않은 결과가 발생합니다.

  15. 15

    Php를 사용하여 MYSQL 데이터베이스에서 주석을 가져 오면 예기치 않은 JSON 결과가 발생합니다.

  16. 16

    스트림 sorted ()로 인해 예기치 않은 결과가 발생합니다.

  17. 17

    for 루프로 인해 예기치 않은 결과가 발생합니다.

  18. 18

    GMP와 함께 C ++에서 RSA를 사용하여 파일을 해독하려고하면 예기치 않은 결과가 발생합니다.

  19. 19

    바이너리 구조를 파일에 쓰면 예기치 않은 결과가 발생합니까?

  20. 20

    문자에서 문자열을 선언하면 예기치 않은 결과가 발생합니다. 왜 그렇습니까?

  21. 21

    react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

  22. 22

    react SPA 프로덕션 애플리케이션에서 window.location.href를 설정하면 예기치 않은 결과가 발생합니다.

  23. 23

    클래스 인스턴스 사전에 객체를 저장하면 예기치 않은 결과가 발생합니다.

  24. 24

    음의 정수를 반대로하면 예기치 않은 결과가 발생합니다.

  25. 25

    복식 배열을 인쇄하면 예기치 않은 결과가 발생합니다.

  26. 26

    두 NSDate 개체의 동등성을 비교하면 예기치 않은 결과가 발생합니다.

  27. 27

    Java Socket에서 예기치 않은 오류가 발생합니다.

  28. 28

    SonarQube Jacoco JUnit : SonarScanner에 예기치 않은 문제가 많이 발생합니다.

  29. 29

    주어진 크기와 X / Y POS로 VB.NET에서 원을 그리면 예기치 않은 결과가 발생합니다.

뜨겁다태그

보관