Есть ли способ подсчета ненулевых значений на строку в искровой df? - PullRequest
1 голос
/ 05 апреля 2019

У меня очень широкий df с большим количеством столбцов.Мне нужно получить количество ненулевых значений на строку для этого в Python.

Пример DF -

+-----+----------+-----+-----+-----+-----+-----+-----+
| name|      date|col01|col02|col03|col04|col05|col06|
+-----+----------+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7|
|name2|2017-12-01|101.1|105.5| null| null|127.5| null|

Я хочу добавить столбец с количеством ненулевых значений в col01-col06 -

+-----+----------+-----+-----+-----+-----+-----+-----+-----+
| name|      date|col01|col02|col03|col04|col05|col06|count|
+-----+----------+-----+-----+-----+-----+-----+-----+-----+
|name1|2017-12-01|100.0|255.5|333.3| null|125.2|132.7|    5| 
|name2|2017-12-01|101.1|105.5| null| null|127.5| null|    3|

Мне удалосьполучить это в pandas df, как это -

df['count']=df.loc[:,'col01':'col06'].notnull().sum(axis=1)     

Но пока не повезло с spark df :( Есть идеи?

1 Ответ

0 голосов
/ 05 апреля 2019

Преобразовать значения null в true / false, затем в целые числа, а затем сложить их:

from pyspark.sql import functions as F
from pyspark.sql.types import IntegerType

df = spark.createDataFrame([[1, None, None, 0], 
                            [2, 3, 4, None], 
                            [None, None, None, None], 
                            [1, 5, 7, 2]], 'a: int, b: int, c: int, d: int')

df.select(sum([F.isnull(df[col]).cast(IntegerType()) for col in df.columns]).alias('null_count')).show()

Выход:

+----------+
|null_count|
+----------+
|         2|
|         1|
|         4|
|         0|
+----------+

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