1. เรียนรู้
  2. /
  3. Courses
  4. /
  5. Python에서 Spark SQL 입문

Connected

Exercises

챕터별 최빈 3-튜플

이번에는 쿼리를 더 큰 쿼리의 서브쿼리로 사용해 보겠습니다. Spark SQL은 SQL의 고급 기능을 지원합니다. 이전에는 12개의 챕터로 이루어진 전체 책에서 가장 흔한 단어 시퀀스를 찾는 방법을 배웠습니다. 이제는 12개 각 챕터별로 가장 자주 등장하는 3-튜플을 구해 보겠습니다. 그룹별로 상위 행을 가져오기 위해 윈도 함수(창 함수를 의미)를 사용할 거예요.

word, id, chapter 열이 있는 테이블이 있습니다.

  1. chapter 열은 챕터 번호를 나타냅니다.
  2. word 열은 문서의 개별 단어를 나타냅니다.
  3. id 열은 문서에서의 단어 위치를 나타냅니다.

다음과 같은 쿼리도 제공됩니다:

subquery = """
SELECT chapter, w1, w2, w3, COUNT(*) as count
FROM
(
    SELECT
    chapter,
    word AS w1,
    LEAD(word, 1) OVER(PARTITION BY chapter ORDER BY id ) AS w2,
    LEAD(word, 2) OVER(PARTITION BY chapter ORDER BY id ) AS w3
    FROM text
)
GROUP BY chapter, w1, w2, w3
ORDER BY chapter, count DESC
"""
spark.sql(subquery).show(5)
+-------+---+-----+----+-----+
|chapter| w1|   w2|  w3|count|
+-------+---+-----+----+-----+
|      1| up|   to| the|    6|
|      1|one|   of| the|    6|
|      1| in|front|  of|    5|
|      1| up|  and|down|    5|
|      1| it|  was|   a|    5|
+-------+---+-----+----+-----+
only showing top 5 rows

이 표를 보면 원하는 결과의 첫 번째 행이 다음과 같음을 알 수 있습니다:

+-------+---+-----+----+-----+
|chapter| w1|   w2|  w3|count|
+-------+---+-----+----+-----+
|      1| up|   to| the|    6|
+-------+---+-----+----+-----+

여러분의 과제는 subquery를 더 큰 쿼리의 서브쿼리로 사용하여 챕터별로 가장 빈도가 높은 3-튜플을 구하는 것입니다. 원하는 결과는 스키마는 동일하지만, 각 챕터당 한 행만 있어야 합니다. ROW_NUMBER()를 사용해 챕터별 각 행의 행 번호를 구하세요.

คำแนะนำ

100 XP
  • 챕터별로 가장 자주 등장하는 3-튜플을 구하세요.