Сортировка фрейма данных pyspark по значениям столбцов - PullRequest
0 голосов
/ 29 января 2020

Я новичок в Spark и ищу решение для моей проблемы. Я пытаюсь отсортировать фрейм данных по количеству нулевых значений каждый столбец содержит в порядке возрастания.

Например: data:

column1    Column2     Column3
a          d           h
b          null        null
null       e           i
null       f           h
null       null        k
c          g           l

После сортировки , фрейм данных должен быть:

Column3     Colum2     Column1

Все, что я мог сделать, это подсчитать нулевые значения каждого столбца.

data.select([count(when(col(c).isNull(), c)).alias(c) for c in data.columns])

Теперь я понятия не имею, как продолжить. Я sh Вы могли бы помочь мне.

1 Ответ

0 голосов
/ 29 января 2020

Мое решение, оно работает, как вы хотите:

#Based on your code
df=df.select([count(when(col(c).isNull(), c)).alias(c) for c in df.columns])

# Convert dataframe to dictionary (Python 3.x)
dict = list(map(lambda row: row.asDict(), df.collect()))[0]

# Create a dictionary with sorted values based on keys
sorted_dict={k: v for k, v in sorted(dict.items(), key=lambda item: item[1])}

# Create a sorted list with the column names
sorted_cols = [c for c in sorted_dict.keys()]

# With .select() method we re-order the dataframe
df.select(sorted_cols).show()
...