如何从 group by 中获取第一个非空值?我尝试使用first with coalesce F.first(F.coalesce("code"))
但我没有得到想要的行为(我似乎得到了第一行)。
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"])
我试过了:
(df
.groupby("id")
.agg(F.first(F.coalesce("code")),
F.first(F.coalesce("name")))
.collect())
期望的输出
[Row(id='a', code='code1', name='name2')]