gpt4 book ai didi

java - 访问空数组或空数组时出现 Spark 错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:33 26 4
gpt4 key购买 nike

我有一个具有这种模式的 JSON 文件:

{
"name" : "john doe",
"phone-numbers" : {
"home": ["1111", "222"],
"country" : "England"
}
}

家庭电话号码数组有时可能为空。

我的 spark 应用程序收到这些 JSONS 的列表并执行以下操作:

val dataframe = spark.read.json(filePaths: _*)
val result = dataframe.select($"name",
explode(dataframe.col("phone-numbers.home")))

当“home”数组为空时,我在尝试分解它时收到以下错误:

org.apache.spark.sql.AnalysisException: cannot resolve 'phone-numbers['home']' due to data type mismatch: argument 2 requires integral type, however, ''home'' is of string type.;;

是否有一种优雅的方法可以防止 spark 在该字段为空或 null 时爆炸?

最佳答案

问题不在于空数组 ("home": []),而是空数组 ("home": null) 不适用于 爆炸

所以要么先过滤空值:

val result = df
.filter($"phone-numbers.home".isNotNull)
.select($"name", explode($"phone-numbers.home"))

或用空数组替换空值(在您的情况下我更喜欢):

val nullToEmptyArr = udf(
(arr:Array[Long]) => if(arr==null) Array.empty[Long] else arr
)

val result = df
.withColumn("phone-numbers.home",nullToEmptyArr($"phone-numbers.home")) // clean existing column
.select($"name", explode($"phone-numbers.home"))

关于java - 访问空数组或空数组时出现 Spark 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44094665/

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