gpt4 book ai didi

arrays - Spark获取嵌套对象的数据类型

转载 作者:行者123 更新时间:2023-12-02 11:56:56 26 4
gpt4 key购买 nike

我有一些 JSON 数据,如下所示:

{
"key1":"value1",
"key2":[
1,
2,
3
],
"key3":{
"key31":"value31",
"key32":"value32"
},
"key4":[
{
"key41":"value411",
"key42":"value412",
"key43":"value413"
},
{
"key41":"value421",
"key42":"value422",
"key43":"value423"
}
],
"key5":{
"key51":[
{
"key511":"value511",
"key512":"value512",
"key513":"value513"
},
{
"key511":"value521",
"key512":"value522",
"key513":"value523"
}
]
},
"key6":{
"key61":{
"key611":[
{
"key_611":"value_611",
"key_612":"value_612",
"key_613":"value_613"
},
{
"key_611":"value_621",
"key_612":"value_622",
"key_613":"value_623"
},
{
"key_611":"value_621",
"key_612":"value_622",
"key_613":"value_623"
}
]
}
}
}

它包含简单、复杂和数组类型值的混合。

如果我尝试获取 key1 schema.("key1").dataType 的数据类型,我得到StringType对于 key2、key3 和 key4 也是如此。

对于 key5,我得到 StructType .

但是当我尝试使用 schema.("key5.key51").dataType 获取 key51 的数据类型(它嵌套在 key5 下)时,我收到以下错误:

java.lang.IllegalArgumentException: Field "key5.key51" does not exist.
at org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:264)
at org.apache.spark.sql.types.StructType$$anonfun$apply$1.apply(StructType.scala:264)
at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
at scala.collection.AbstractMap.getOrElse(Map.scala:59)
at org.apache.spark.sql.types.StructType.apply(StructType.scala:263)
... 48 elided

我的主要目的是能够爆炸给定类型,如果它是 ArrayType并且不会因任何其他类型而爆炸。

explode 函数能够正确识别这个给定的键 (key5.key51) 并分解数组。但问题在于确定数据类型。

对我来说,一个可能的解决方案是选择 key5.key51 作为单独的列 key51,然后分解该列。

但是有没有更好、更优雅的方法来做到这一点,同时仍然能够确定给定列的数据类型?

最佳答案

最简单的解决方案是选择感兴趣的字段,然后检索架构:

df.select("key5.key51").schema.head.dataType

直接使用完整架构需要遍历架构,并且可能很难正确执行,而使用嵌入式 .StructTypes 和复杂类型 (Maps数组)。

关于arrays - Spark获取嵌套对象的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48265845/

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