Я использую версию Spark 3.4, создал фрейм данных ниже.
df.show()
Идентификатор --> Строка вывод ---> Логическое значение
ID output
AA true
AA false
BB true
BB true
CC true
CC false
CC true
Я хотел бы применить группировку к столбцу идентификатора и агрегировать значения в выходном столбце (если все значения из выходного столбца верны для каждого идентификатора, он должен возвращать true, иначе false)
Ожидаемый результат будет
ID result
AA false
BB true
CC false
каков наилучший способ (функции Windows/UDF) получить желаемый результат с помощью pyspark? Я ценю вашу помощь!
Для этого сценария нам нужно использовать group by, поэтому udf не является необходимостью.
from pyspark.sql import functions as F
result_df = df.groupBy("ID").agg(F.min("output").alias("result"))
result_df.show()
Выход:
+---+------+
| ID|result|
+---+------+
| AA| false|
| BB| true |
| CC| false|
+---+------+
То же самое можно сделать и с помощью Spark sql,
SELECT ID, MIN(output) AS result
FROM my_table
GROUP BY ID;
используйте SparkSQL каждую функцию, например:
df.groupby('ID').agg(F.expr('every(output) as result'))