как удалить нулевые столбцы из искры df с помощью pyspark - PullRequest
1 голос
/ 02 августа 2020

у меня есть df с нулевыми значениями в каждой строке, например

col1       col2      col3      col4  
|--------|---------|---------|-------------|
|null    | null    | foo     |  null       |
|--------|---------|---------|-------------|
|  null  | bar     |  null   |  null       |
|--------|---------|---------|-------------|
| null   |  null   |  null   |     kid     |
|--------|---------|---------|-------------|
| orange | null    | null    |  null       |
|--------|---------|---------|-------------|

, и мне нужно удалить все нулевые столбцы, а выходной df должен быть одной строкой, как

 col1       col2      col3      col4  
|--------|---------|---------|-------------|
|orange  | bar     | foo     |     kid     |
|--------|---------|---------|-------------|

Что делать, чтобы добиться желаемого результата? спасибо

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Другой вариант -

df1.select(df1.columns.map(c => first(c, ignoreNulls = true).as(c)): _*)
      .show(false)
    /**
      * +------+----+----+----+
      * |col1  |col2|col3|col4|
      * +------+----+----+----+
      * |orange|bar |bar |kid |
      * +------+----+----+----+
      */
0 голосов
/ 02 августа 2020

Вот пример с моим тестовым фреймом данных:

+----+----+----+----+
|a   |b   |c   |d   |
+----+----+----+----+
|null|null|cc  |null|
|null|null|null|dc  |
|null|bb  |null|null|
|aa  |null|null|null|
+----+----+----+----+

и тестовый код:

from pyspark.sql.functions import col, max

df = spark.read.option("header","true").option("inferSchema","true").csv("test.csv")

cols = [max(col(c)).alias(c) for c in df.columns]
df.groupBy().agg(*cols).show(10, False)

дает результаты:

+---+---+---+---+
|a  |b  |c  |d  |
+---+---+---+---+
|aa |bb |cc |dc |
+---+---+---+---+

где я использовали функции groupBy и max.

...