상위 하위 관계에 대한 테이블의 값을 집계하고 업데이트하는 Spark 쿼리

BigDataLearner

다음 테이블이 있습니다 (각 테이블에는 다른 열도 있지만 여기에는 필요하지 않습니다)

아이템 테이블

      user_id, party_id, parent_user_id
        1,        X,      null
        2,        X,       1
        3,        X,       1
        4,        Z,       null
        5,        Z,       4
        6,        Y,       null
        7,        Y,       6
        8,        Y,       6
        1,        Y,       null

어디 parent_user_id는 자사의 부모 사용자와는 다음 parent_user_id이 중 열, 그것의 자식 사용자 있음을 나타냅니다 나타냅니다.

우선 순위 테이블

      user_id, party_id, priority
          1,      X,     0.3 
          2,      X,     0.8
          3,      X,     0.5 
          4,      Z,     0.1
          5,      Z,     0.2
          6,      Y,     0.7
          7,      Y,     0.4
          8,      Y,     0.5
          1,      Y,     0.3

내가하고 싶은 것은 다음과 같이 우선 순위 테이블을 변환하는 스파크 쿼리를 작성하는 것입니다. 논리는 모든 상위 사용자 및 하위 사용자에 대해 최대 우선 순위 즉, 최대 (상위 사용자 우선 순위, 하위 사용자 1 우선 순위, 하위 사용자 2 우선 순위, ....)를 계산 한 다음 우선 순위를 변경하여 해당 상위 사용자의 최대 값을 반영해야합니다. 및 모든 하위 항목 (아래 업데이트 된 표에 언급 됨).

우선 순위 테이블

      user_id, party_id, priority
          1,      X,     0.8 
          2,      X,     0.8
          3,      X,     0.8 
          4,      Z,     0.2
          5,      Z,     0.2
          6,      Y,     0.7
          7,      Y,     0.7
          8,      Y,     0.7
          1,      Y,     0.3

이를 달성하기 위해 스파크 작업을 어떻게 작성합니까? 이를 수행하기 위해 먼저 기본 SQL 쿼리를 작성하여 시작하는 방법은 무엇입니까?

발라지 레디

내 솔루션은 다음 사항을 기반으로합니다.

1) 가입 itempriority테이블 기반 user_idparty_id.

2) null parent_user_id을 그것의 것으로 대체 user_id(이것은 마술을합니다)

3) ** 필요한 경우 불필요한 열을 삭제합니다.

4) 윈도우 기능을 적용하고 party_id.

val itemTbl = Seq((1, "X", None),
      (2, "X", Some(1)),
      (3, "X", Some(1)),
      (4, "Z", None),
      (5, "Z", Some(4)),
      (6, "Y", None),
      (7, "Y", Some(6)),
      (8, "Y", Some(6)),
      (1, "Y", None)).toDF("user_id", "party_id", "parent_user_id")


    val priorityTbl = Seq((1, "X", 0.3),
      (2, "X", 0.8),
      (3, "X", 0.5),
      (4, "Z", 0.1),
      (5, "Z", 0.2),
      (6, "Y", 0.7),
      (7, "Y", 0.4),
      (8, "Y", 0.5),
      (1, "Y", 0.3)).toDF("user_id", "party_id", "priority")

  //replace null parent_user_id with actual value in Item table.
    val replaceExp = when(col("parent_user_id") isNull, col("user_id")).otherwise(col("parent_user_id"))
    val itemTblModf = itemTbl.withColumn("parent_user_id", replaceExp)

val windowSpec = Window.partitionBy("party_id", "parent_user_id")
itemTblModf.join(priorityTbl, itemTbl("user_id") <=> priorityTbl("user_id") && itemTbl("party_id") <=> priorityTbl("party_id"))
  .drop(priorityTbl("user_id"))
  .drop(priorityTbl("party_id"))
  .withColumn("new_priority", max("priority") over windowSpec).show(200, false)

결과

+-------+--------+--------------+--------+------------+
|user_id|party_id|parent_user_id|priority|new_priority|
+-------+--------+--------------+--------+------------+
|1      |Y       |1             |0.3     |0.3         |
|1      |X       |1             |0.3     |0.8         |
|2      |X       |1             |0.8     |0.8         |
|3      |X       |1             |0.5     |0.8         |
|4      |Z       |4             |0.1     |0.2         |
|5      |Z       |4             |0.2     |0.2         |
|6      |Y       |6             |0.7     |0.7         |
|7      |Y       |6             |0.4     |0.7         |
|8      |Y       |6             |0.5     |0.7         |
+-------+--------+--------------+--------+------------+

내 솔루션이 매우 효율적인 솔루션이라고는 말할 수 없지만 실행 가능한 솔루션이며 RDD를 사용하여보다 기능적인 방식으로 동일한 결과를 얻을 수도 있습니다.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

임시 테이블을 업데이트하기위한 복잡한 쿼리입니다. 아마도 파생 된 테이블 또는 상관 하위 쿼리?

분류에서Dev

하위 쿼리를 사용한 재귀 관계 및 상대 테이블 쿼리

분류에서Dev

Spark의 스칼라 하위 쿼리에 대해 상관 된 스칼라 변수를 집계해야합니다.

분류에서Dev

IN이 오류 하위 쿼리가 둘 이상의 값을 반환 한 경우 테이블 업데이트

분류에서Dev

다 대다 관계의 브리징 테이블에서 데이터를 검색하기위한 쿼리

분류에서Dev

하이브 테이블의 시계열 데이터에 대해 이전 시점에서 사용할 수없는 새 값을 찾기위한 쿼리

분류에서Dev

테이블에 대량 업데이트. 오류 'Msg 512-하위 쿼리가 둘 이상의 값을 반환했습니다. ... '

분류에서Dev

조인 된 테이블의 값을 사용하여 단일 테이블에 대한 MySQL 업데이트 쿼리

분류에서Dev

2 개 이상의 값을 반환 한 하위 쿼리-특정 날짜의 값으로 날짜 범위에 대한 레코드 업데이트

분류에서Dev

상위 하위 테이블 값 정렬을위한 단일 MySQL 쿼리

분류에서Dev

5 개의 테이블을 조인하기위한 LINQ에 대한 SQL 쿼리

분류에서Dev

Sequelize : 2 개 이상의 테이블 관계에 대한 OR 쿼리

분류에서Dev

동일한 테이블의 하위 쿼리로 업데이트

분류에서Dev

MySQL은 테이블을 업데이트하고 하위 쿼리의 동일한 테이블에서 선택합니다.

분류에서Dev

목록의 하위 집합에 대한 고유 값 계산

분류에서Dev

고유 한 출력이있는 상위 테이블 (하위 테이블 기반 상태 논리)에서 새 상태 열 런타임을 계산하는 방법

분류에서Dev

거대한 테이블에 대한 SQL 계산 및 다중 하위 쿼리

분류에서Dev

기본 키 열 값을 업데이트하기위한 쿼리

분류에서Dev

연도 범위에 대한 월별 집계 계산을 반환하는 쿼리

분류에서Dev

상위 N이있는 하위 문서에 대한 Mongo 쿼리

분류에서Dev

하위 테이블에서 조인을 사용하여 쿼리 업데이트

분류에서Dev

하나의 쿼리에서 테이블 관계를 위아래로 이동

분류에서Dev

하나의 쿼리에서 테이블 관계를 위아래로 이동

분류에서Dev

테이블 A에서 업데이트 한 후 테이블 A의 특정 열을 업데이트하는 트리거

분류에서Dev

동일한 하위 집합이있는 상위에 대한 SQL 쿼리

분류에서Dev

테이블을 생성하기위한 이미지에 대한 SQL 쿼리

분류에서Dev

기본 키를 통한 일대일 관계에서 상위 테이블을 통해 저장하는 방법

분류에서Dev

집계 된 하위 데이터를 기반으로 상위에 대한 순위를 결정하는 어려운 MySQL 쿼리

분류에서Dev

동일한 테이블에서 업데이트시 mysql 하위 쿼리

Related 관련 기사

  1. 1

    임시 테이블을 업데이트하기위한 복잡한 쿼리입니다. 아마도 파생 된 테이블 또는 상관 하위 쿼리?

  2. 2

    하위 쿼리를 사용한 재귀 관계 및 상대 테이블 쿼리

  3. 3

    Spark의 스칼라 하위 쿼리에 대해 상관 된 스칼라 변수를 집계해야합니다.

  4. 4

    IN이 오류 하위 쿼리가 둘 이상의 값을 반환 한 경우 테이블 업데이트

  5. 5

    다 대다 관계의 브리징 테이블에서 데이터를 검색하기위한 쿼리

  6. 6

    하이브 테이블의 시계열 데이터에 대해 이전 시점에서 사용할 수없는 새 값을 찾기위한 쿼리

  7. 7

    테이블에 대량 업데이트. 오류 'Msg 512-하위 쿼리가 둘 이상의 값을 반환했습니다. ... '

  8. 8

    조인 된 테이블의 값을 사용하여 단일 테이블에 대한 MySQL 업데이트 쿼리

  9. 9

    2 개 이상의 값을 반환 한 하위 쿼리-특정 날짜의 값으로 날짜 범위에 대한 레코드 업데이트

  10. 10

    상위 하위 테이블 값 정렬을위한 단일 MySQL 쿼리

  11. 11

    5 개의 테이블을 조인하기위한 LINQ에 대한 SQL 쿼리

  12. 12

    Sequelize : 2 개 이상의 테이블 관계에 대한 OR 쿼리

  13. 13

    동일한 테이블의 하위 쿼리로 업데이트

  14. 14

    MySQL은 테이블을 업데이트하고 하위 쿼리의 동일한 테이블에서 선택합니다.

  15. 15

    목록의 하위 집합에 대한 고유 값 계산

  16. 16

    고유 한 출력이있는 상위 테이블 (하위 테이블 기반 상태 논리)에서 새 상태 열 런타임을 계산하는 방법

  17. 17

    거대한 테이블에 대한 SQL 계산 및 다중 하위 쿼리

  18. 18

    기본 키 열 값을 업데이트하기위한 쿼리

  19. 19

    연도 범위에 대한 월별 집계 계산을 반환하는 쿼리

  20. 20

    상위 N이있는 하위 문서에 대한 Mongo 쿼리

  21. 21

    하위 테이블에서 조인을 사용하여 쿼리 업데이트

  22. 22

    하나의 쿼리에서 테이블 관계를 위아래로 이동

  23. 23

    하나의 쿼리에서 테이블 관계를 위아래로 이동

  24. 24

    테이블 A에서 업데이트 한 후 테이블 A의 특정 열을 업데이트하는 트리거

  25. 25

    동일한 하위 집합이있는 상위에 대한 SQL 쿼리

  26. 26

    테이블을 생성하기위한 이미지에 대한 SQL 쿼리

  27. 27

    기본 키를 통한 일대일 관계에서 상위 테이블을 통해 저장하는 방법

  28. 28

    집계 된 하위 데이터를 기반으로 상위에 대한 순위를 결정하는 어려운 MySQL 쿼리

  29. 29

    동일한 테이블에서 업데이트시 mysql 하위 쿼리

뜨겁다태그

보관