ComeçarComece de graça

3-tuple mais frequente por capítulo

Agora vamos usar uma consulta como subconsulta dentro de uma consulta maior. O Spark SQL oferece suporte a recursos avançados de SQL. Antes, você aprendeu a encontrar as sequências de palavras mais comuns em todo um livro com 12 capítulos. Agora, você vai obter o 3-tuple mais frequente para cada um dos 12 capítulos. Você fará isso usando uma função de janela para recuperar a primeira linha por grupo.

Há uma tabela com as colunas word, id, chapter.

  1. A coluna chapter corresponde ao número de um capítulo.
  2. A coluna word corresponde a uma única palavra no documento.
  3. A coluna id corresponde à posição da palavra no documento.

Também temos a seguinte consulta:

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

A partir desta tabela, você pode determinar que a primeira linha do resultado desejado será:

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

Sua tarefa é usar subquery como uma subconsulta em uma consulta maior para obter o 3-tuple mais frequente por capítulo. O resultado desejado terá o mesmo esquema, mas com uma linha por capítulo. Use ROW_NUMBER() para obter a numeração das linhas por capítulo.

Este exercício faz parte do curso

Introdução ao Spark SQL em Python

Ver curso

Instruções do exercício

  • Obtenha o 3-tuple mais frequente por capítulo.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

#   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()
Editar e executar o código