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.
- A coluna
chaptercorresponde ao número de um capítulo. - A coluna
wordcorresponde a uma única palavra no documento. - A coluna
idcorresponde à 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
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()