Comment puis-je obtenir les premières valeurs non nulles d'un groupe? J'ai essayé d'utiliser first avec coalesceF.first(F.coalesce("code"))
mais je n'obtiens pas le comportement désiré (je semble obtenir la première rangée).Récupère les premières valeurs non nulles dans le groupe (Spark 1.6)
from pyspark import SparkContext
from pyspark.sql import SQLContext
from pyspark.sql import functions as F
sc = SparkContext("local")
sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame([
("a", None, None),
("a", "code1", None),
("a", "code2", "name2"),
], ["id", "code", "name"])
J'ai essayé:
(df
.groupby("id")
.agg(F.first(F.coalesce("code")),
F.first(F.coalesce("name")))
.collect())
SORTIE DÉSIRÉ
[Row(id='a', code='code1', name='name2')]
Bizarrement, je reçois ("a", null, null) en cours d'exécution de la ligne vous avez partagé. Exécution de Spark 1.6. – ksindi
@capitalistpug, j'ai essayé avec Spark 1.5. Je vais jeter un coup d'oeil à 1.6 et voir pourquoi cela arrive. –
@capitalistpug, j'ai édité la réponse après quelques recherches. S'il vous plaît laissez-moi savoir si la nouvelle solution est assez bonne. –