Tríos de palabras más frecuentes por capítulo
Ahora usaremos una consulta como subconsulta dentro de otra más grande. Spark SQL admite funciones avanzadas de SQL. Antes aprendiste a encontrar las secuencias de palabras más comunes en todo un libro con 12 capítulos. Ahora obtendrás el trío de palabras más frecuente para cada uno de los 12 capítulos. Lo harás usando una función de ventana para recuperar la primera fila por grupo.
Hay una tabla con las columnas word, id, chapter.
- La columna
chaptercorresponde al número de capítulo. - La columna
wordcorresponde a una única palabra del documento. - La columna
idcorresponde a la posición de la palabra en el documento.
También tenemos la siguiente 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 de esta tabla puedes determinar que la primera fila del resultado deseado será:
+-------+---+-----+----+-----+
|chapter| w1| w2| w3|count|
+-------+---+-----+----+-----+
| 1| up| to| the| 6|
+-------+---+-----+----+-----+
Tu tarea es usar subquery como una subconsulta dentro de una consulta mayor para obtener el trío más frecuente por capítulo. El resultado deseado tendrá el mismo esquema, pero con una única fila por capítulo. Usa ROW_NUMBER() para obtener el número de fila por fila y por capítulo.
Este ejercicio forma parte del curso
Introducción a Spark SQL en Python
Instrucciones del ejercicio
- Obtén el trío de palabras más frecuente por capítulo.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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()