54 votes

pyspark collect_set ou collect_list avec groupby

Comment puis-je utiliser collect_set ou collect_list sur une trame de données après groupby . par exemple: df.groupby('key').collect_set('values') . Je reçois une erreur: AttributeError: 'GroupedData' object has no attribute 'collect_set'

108voto

tuva Points 885

Vous devez utiliser agg. Exemple:

 from pyspark import SparkContext
from pyspark.sql import HiveContext
from pyspark.sql import functions as F

sc = SparkContext("local")

sqlContext = HiveContext(sc)

df = sqlContext.createDataFrame([
    ("a", None, None),
    ("a", "code1", None),
    ("a", "code2", "name2"),
], ["id", "code", "name"])

df.show()

+---+-----+-----+
| id| code| name|
+---+-----+-----+
|  a| null| null|
|  a|code1| null|
|  a|code2|name2|
+---+-----+-----+
 

Notez dans ce qui précède que vous devez créer un HiveContext. Voir https://stackoverflow.com/a/35529093/690430 pour connaître les différentes versions de Spark.

 (df
  .groupby("id")
  .agg(F.collect_set("code"),
       F.collect_list("name"))
  .show())

+---+-----------------+------------------+
| id|collect_set(code)|collect_list(name)|
+---+-----------------+------------------+
|  a|   [code1, code2]|           [name2]|
+---+-----------------+------------------+
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X