如何获取不为空的列名

Posted

技术标签:

【中文标题】如何获取不为空的列名【英文标题】:How to get the column name which is not null 【发布时间】:2021-05-20 01:18:26 【问题描述】:

我有一个如下的 Spark 数据框

ID Col A Col B
1 null Some Value
2 Some Value null

我需要添加一个新列,其中包含不为空的列名(在 Col A 和 Col B 之间)。 所以预期的数据框应该是这样的,

ID Col A Col B result
1 null Some Value Col B
2 Some Value null Col A

任何帮助将不胜感激。

谢谢!

【问题讨论】:

你能提供一些你试过的代码吗? 【参考方案1】:

从您的数据框创建临时视图后,例如

df.createOrReplaceTempView("my_data")

您可以使用 newdf = sparkSession.sql("query here") 在您的 spark 会话中运行以下命令

SELECT
    ID,
    ColA,
    ColB,
    CASE
        WHEN ColA IS NULL AND ColB IS NULL THEN NULL
        WHEN ColB IS NULL THEN 'ColA'
        WHEN ColA IS NULL THEN 'ColB'
        ELSE 'ColA Col B'
    END AS result
FROM my_data

或者只使用python

from pyspark.sql.functions import when, col

df = df.withColumn("result",when(
    col("Col A").isNull() & col("Col B").isNull() , None
).when(
    col("Col B").isNull() ,'Col A'
).when(
    col("Col A").isNull() ,'Col B'
).otherwise('Col A Col B') 
)

【讨论】:

仅供参考,后两行 WHEN 中不需要 AND

以上是关于如何获取不为空的列名的主要内容,如果未能解决你的问题,请参考以下文章

R:获取值不为空的列名

对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比

VB6、MS Access、DAO - 显示列名不为空的所有记录

批处理:如何判断获取内容为空的方法

Python Pandas:获取列不为空的DataFrame的行

与从 2 个不为空的表中获取数据相关的数据库查询