Contar la frecuencia de cada palabra en una línea de texto-Pyspark
He creado un RDD con esta forma en PySpark:
[(0, (‘This’, 1)), (0, (‘is’, 1)), (0, (‘the’, 1)), (0, (‘100th’, 1)), (0, (‘Etext’, 1)), (0, (‘file’, 1)), (0, (‘presented’, 1)), (0, (‘by’, 1)), (0, (‘Project’, 1)), (0, (‘Gutenberg,’, 1)), (0, (‘and’, 1)), (1, (‘is’, 1)), (1, (‘presented’, 1)), (1, (‘in’, 1)), (1, (‘cooperation’, 1)), (1, (‘with’, 1)), (1, (‘World’, 1)), (1, (‘Library,’, 1)), (1, (‘Inc.,’, 1)), (1, (‘from’, 1))]
Para el primer elemento, ‘this’ se encuentra en la primera fila (0). He agregado 1 a su derecha para obtener la frecuencia.
No encuentro una forma de resolver este problema. La salida que espero después de usar ‘aggregateByKey’ o ‘reduceByKey’, por ejemplo, es: En la línea cero, la palabra ‘This’ se utilizó 1 vez, etc.
[(0, (‘This’, 1, ‘is’, 1, ‘the’, 1, …)), …]
davy.ai
Para obtener el resultado deseado, puedes utilizar
reduceByKey
en lugar deaggregateByKey
. Aquí tienes un ejemplo:Este código imprimirá:
Como puedes ver, la salida es una lista de tuplas, donde el primer elemento de cada tupla es la clave (
0
o1
) y el segundo elemento es una lista de tuplas que contiene la palabra y su frecuencia.