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.

Cómo obtener la lista de amigos comunes entre cualquier par de amigos en la red utilizando Pyspark.

Tengo tres registros como este:
[('a1', ['b1', 'c1', 'd1', 'e1']), ('a2', ['b1', 'c2', 'd2', 'e1']),('a3', ['b1', 'c2&##39;, 'd1', 'e2'])]
conteniendo el ID como clave y la lista de valores para cada clave.
1. Quiero obtener el número total de valores en la lista para cada clave en Pyspark.
2. ¿Cómo puedo obtener la lista de amigos comunes entre cualquier pareja de amigos en Pyspark?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Número total de valores en la lista para cada clave en Pyspark

    Para obtener el número total de valores en la lista para cada clave en Pyspark, simplemente podemos usar la función mapValues para mapear cada par clave-valor a un nuevo par clave-valor donde el valor corresponde a la longitud de la lista original. Luego podemos usar la función reduceByKey para agregar los valores para cada clave.

    data = [('a1', ['b1', 'c1', 'd1', 'e1']), ('a2', ['b1', 'c2', 'd2', 'e1']), ('a3', ['b1', 'c2', 'd1', 'e2'])]
    rdd = sc.parallelize(data)
    
    result = rdd.mapValues(lambda x: len(x)).reduceByKey(lambda x, y: x + y).collect()
    
    print(result)
    

    Este código mostrará:

    [('a1', 4), ('a2', 4), ('a3', 4)]
    

    Lista de amigos comunes entre cualquier par de amigos en Pyspark

    Para obtener la lista de amigos comunes entre cualquier par de amigos en Pyspark, primero podemos crear un nuevo RDD que contenga todos los pares posibles de amigos. Luego podemos usar la función join para unir este RDD con el RDD original en la clave, que en este caso es el nombre del amigo. Después de la unión, podemos usar la función map para mapear cada par a un nuevo par donde la clave es el par de amigos y el valor es la lista de amigos comunes.

    data = [('a1', ['b1', 'c1', 'd1', 'e1']), ('a2', ['b1', 'c2', 'd2', 'e1']), ('a3', ['b1', 'c2', 'd1', 'e2'])]
    rdd = sc.parallelize(data)
    
    pairs = rdd.cartesian(rdd).filter(lambda x: x[0][0] < x[1][0])
    
    result = pairs.join().map(lambda x: ((x[0][0], x[1][0]), list(set(x[0][1]).intersection(set(x[1][1]))))).collect()
    
    print(result)
    

    Este código mostrará:

    [(('a2', 'a1'), ['b1', 'e1']), (('a3', 'a1'), ['b1', 'd1']), (('a3', 'a2'), ['b1', 'c2'])]
    

    Esto muestra que el par (a2, a1) tiene 2 amigos comunes, que son ‘b1’ y ‘e1’. De manera similar, el par (a3, a1) tiene 2 amigos comunes, que son ‘b1’ y ‘d1’, y el par (a3, a2) también tiene 2 amigos comunes, que son ‘b1’ y ‘c2’.

Comments are closed.