gpt4 book ai didi

apache-spark - 如何访问嵌套架构列?

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

我有一个带有 JSON 的 Kafka 流媒体源,例如{"type":"abc","1":"23.2"}

查询给出以下异常:

org.apache.spark.sql.catalyst.parser.ParseException:  extraneous
input '.1' expecting {<EOF>, .......}
== SQL ==
person.1

访问 "person.1" 的正确语法是什么?

我什至将 DoubleType 更改为 StringType,但这也不起作用。示例仅通过保留 person.type 并删除 selectExpr 中的 person.1 就可以正常工作:

val personJsonDf = inputDf.selectExpr("CAST(value AS STRING)")
val struct = new StructType()
.add("type", DataTypes.StringType)
.add("1", DataTypes.DoubleType)
val personNestedDf = personJsonDf
.select(from_json($"value", struct).as("person"))
val personFlattenedDf = personNestedDf
.selectExpr("person.type", "person.1")
val consoleOutput = personNestedDf.writeStream
.outputMode("update")
.format("console")
.start()

最佳答案

有趣的是,select($"person.1") 应该可以正常工作(但您使用的 selectExpr 可能会混淆 Spark SQL)。

StructField(1,DoubleType,true) 将不起作用,因为类型实际上应该是 StringType

让我们看看...

$ cat input.json
{"type":"abc","1":"23.2"}

val input = spark.read.text("input.json")
scala> input.show(false)
+-------------------------+
|value |
+-------------------------+
|{"type":"abc","1":"23.2"}|
+-------------------------+

import org.apache.spark.sql.types._
val struct = new StructType()
.add("type", DataTypes.StringType)
.add("1", DataTypes.StringType)
val q = input.select(from_json($"value", struct).as("person"))
scala> q.show
+-----------+
| person|
+-----------+
|[abc, 23.2]|
+-----------+

val q = input.select(from_json($"value", struct).as("person")).select($"person.1")
scala> q.show
+----+
| 1|
+----+
|23.2|
+----+

关于apache-spark - 如何访问嵌套架构列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54193697/

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