Вычисление процента значений нескольких столбцов в DataFrame Spark в PySpark - PullRequest
0 голосов
/ 24 октября 2019

У меня есть несколько двоичных столбцов (0 и 1) в моем Spark DataFrame. Я хочу рассчитать процент от 1 в каждом столбце и спроецировать результат в другой DataFrame.

Входной DataFrame dF выглядит следующим образом:

+------------+-----------+
|           a|          b|
+------------+-----------+
|           0|          1|
|           1|          1|
|           0|          0|
|           1|          1|
|           0|          1|
+------------+-----------+

Ожидаемый результат будет выглядеть следующим образом:

+------------+-----------+
|           a|          b|
+------------+-----------+
|          40|         80|
+------------+-----------+

40 (2/5) и 80 (4 /5) это процент от 1 в столбцах a и b соответственно.

То, что я до сих пор пробовал, - это создание пользовательской функции агрегирования, передавая ей два столбца a и b, группируя ее, чтобы получить счетчик 0 и 1, вычисляя проценты от 0и 1, и, наконец, фильтрация DataFrame, чтобы сохранить только 1.

selection =  ['a', 'b']

@F.udf
def cal_perc(c, dF):
    grouped = dF.groupBy(c).count()
    grouped = grouped.withColumn('perc_' + str(c), ((grouped['count']/5) * 100))
    return grouped[grouped[c] == 1].select(['perc_' + str(c)])

dF.select(*(dF[c].alias(c) for c in selection)).agg(*(cal_perc(c, dF).alias(c) for c in selection)).show()

Это, кажется, не работает. Я не могу понять, где я иду не так. Любая помощь приветствуется. Благодарю.

1 Ответ

2 голосов
/ 24 октября 2019

Если ваши столбцы на самом деле всегда равны 0/1 и никакие другие цифры не равны, среднее значение должно быть эквивалентным. Это реализовано изначально в spark.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...