如何获取不为空的列名
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以上是关于如何获取不为空的列名的主要内容,如果未能解决你的问题,请参考以下文章
对 laravel 的查询以从“已填充”且不为空的 db 行中获取百分比
VB6、MS Access、DAO - 显示列名不为空的所有记录