gpt4 book ai didi

scala - 在 Spark 中拆分列并将空值转换为 null

转载 作者:行者123 更新时间:2023-12-04 08:08:05 32 4
gpt4 key购买 nike

当我在 Spark 中拆分列时,我试图将一个空值填充为 null。例子:

| A        |
| 1.2.3 |
| 4..5 |
我正寻找:


一种
一个 split 1
split 2
一个 split 3


1.2.3
1
2
3

4..5
4
空值
5


我有:


一种
一个 split 1
split 2
一个 split 3


1.2.3
1
2
3

4..5
4

5


我的代码是:
df.withColumn("A", when(split(col("A"), "\\.") =!= lit(""), split(col("A"), "\\."))
但是,由于类型不匹配,我收到了一个错误:

array(string) is not a string.


有可能在不使用 UDF 的情况下找到解决方案吗?
非常感谢

最佳答案

当列使用 when 时,您可以在获取数组项时进行拆分如果元素为空,则更改为 null :

// n is the max array size from split (in your example it's 3)
val n = 3

val df1 = df.withColumn(
"ASplit",
split(col("A"), "[.]")
).select(
Seq(col("A")) ++ (0 to n-1).map(i =>
when(col("ASplit")(i) === "", lit(null)).otherwise(col("ASplit")(i)).as(s"A split $i")
): _*
)

//+-----+---------+---------+---------+
//| A|A split 0|A split 1|A split 2|
//+-----+---------+---------+---------+
//|1.2.3| 1| 2| 3|
//| 4..5| 4| null| 5|
//+-----+---------+---------+---------+

关于scala - 在 Spark 中拆分列并将空值转换为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66123950/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com