首页 > 解决方案 > 如何使用pyspark从spark df中删除空列

问题描述

我在每一行都有一个带有空值的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     |
|--------|---------|---------|-------------|

我应该怎么做才能达到预期的效果?谢谢

标签: pyspark-dataframes

解决方案


这是我的测试数据框的示例:

+----+----+----+----+
|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 |
+---+---+---+---+

我用过groupByandmax函数的地方。


推荐阅读