我使用from_json()
方法从kafka接收JSON数据。它期望我提供模式。我的JSON结构是这样;
{
"Items": {
"key1": [
{
"id": "",
"name": "",
"val": ""
}
],
"key2": [
{
"id": "",
"name": "",
"val": ""
}
],
"key3": [
{
"id": "",
"name": "",
"val": ""
}
]
}
}
在这种状态下; key1, key2, key3
个字段未知。因此,它们是dynamic
。这些字段的名称可能是"abc", "def"
等。如何在Spark结构化流中为此JSON定义JSON模式?
编辑: 例如另一个json;
{
"Items": {
"stack": [
{
"id": "",
"name": "",
"val": ""
}
],
"over": [
{
"id": "",
"name": "",
"val": ""
}
],
"flow": [
{
"id": "",
"name": "",
"val": ""
}
]
}
}
答案 0 :(得分:2)
您需要定义架构以解析此类json文件。您的架构应如下所示。
val valSchema = new StructType()
.add("id", StringType)
.add("name", StringType)
.add("val", StringType)
val valArrSchema = new ArrayType(valSchema, true)
val mapSchema = new MapType(StringType, valArrSchema, true)
val jsonSchema = new StructType().add("Items", mapSchema)
您可以使用from_json方法解析json。
val testDF = df.withColumn("json", from_json(col("value"),jsonSchema ))
答案 1 :(得分:0)
key1
,key2
和key3
未提交。它们是关键的价值!此处的字段为id
,name
,value
和key
,key
的值可以是动态的,没关系,这里没有复杂性。>