ÎncepețiÎncepe gratuit

Cele mai frecvente 3-tuple per capitol

Vom folosi acum o interogare ca subinterogare într-o interogare mai mare. Spark SQL suportă funcționalități avansate ale SQL. Anterior, ai învățat cum să găsești cele mai frecvente secvențe de cuvinte dintr-o carte cu 12 capitole. Acum vei obține cel mai frecvent 3-tuple pentru fiecare dintre cele 12 capitole. Vei face acest lucru folosind o funcție de fereastră pentru a extrage primul rând per grup.

Există un tabel cu coloanele word, id, chapter.

  1. Coloana chapter corespunde numărului unui capitol.
  2. Coloana word corespunde unui singur cuvânt din document.
  3. Coloana id corespunde poziției cuvântului în document.

Avem, de asemenea, următoarea interogare:

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

Din acest tabel poți determina că primul rând al rezultatului dorit va fi:

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

Sarcina ta este să folosești subquery ca subinterogare într-o interogare mai mare, pentru a obține cel mai frecvent 3-tuple per capitol. Rezultatul dorit va avea aceeași schemă, dar cu un singur rând per capitol. Folosește ROW_NUMBER() pentru a obține numărul rândului per capitol.

Acest exercițiu face parte din cursul

Introducere în Spark SQL în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Obține cel mai frecvent 3-tuple per capitol.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

#   Most frequent 3-tuple per chapter
query = """
SELECT chapter, w1, w2, w3, count FROM
(
  SELECT
  chapter,
  ____() OVER (PARTITION BY chapter ORDER BY ____ DESC) AS row,
  w1, w2, w3, count
  FROM ( %s )
)
WHERE row = ____
ORDER BY chapter ASC
""" % subquery

spark.sql(query).show()
Editează și rulează codul