es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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, …)), …]

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, puedes utilizar reduceByKey en lugar de aggregateByKey. Aquí tienes un ejemplo:

    rdd = sc.parallelize([(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))])
    
    # agrupar por el primer elemento de cada tupla
    grouped_rdd = rdd.groupByKey()
    
    # aplicar reduceByKey para contar la frecuencia de cada palabra
    frequency_rdd = grouped_rdd.mapValues(lambda x: [(word, freq) for word, freq in x]).reduceByKey(lambda x, y: x + y)
    
    # mostrar el resultado
    output = frequency_rdd.collect()
    
    print(output)
    

    Este código imprimirá:

    [(0, [('This', 1), ('is', 1), ('the', 1), ('100th', 1), ('Etext', 1), ('file', 1), ('presented', 1), ('by', 1), ('Project', 1), ('Gutenberg,', 1), ('and', 1)]), 
     (1, [('is', 1), ('presented', 1), ('in', 1), ('cooperation', 1), ('with', 1), ('World', 1), ('Library,', 1), ('Inc.,', 1), ('from', 1)])]
    

    Como puedes ver, la salida es una lista de tuplas, donde el primer elemento de cada tupla es la clave (0 o 1) y el segundo elemento es una lista de tuplas que contiene la palabra y su frecuencia.

Comments are closed.