【问题标题】: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 |
任何帮助将不胜感激。
谢谢!
【问题讨论】:
标签:
apache-spark
pyspark
apache-spark-sql
【解决方案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')
)