【发布时间】:2019-04-10 11:24:34
【问题描述】:
我从 Azure 事件中心获取流数据集。数据采用以下格式:
[
[
{
"data": "sampledata1",
"addressdata": {
"isTest": false,
"address": "washington",
"zipcode": 98119,
"city": "seattle",
"randomstring": "abcdabcd:ghkjnkasd:asdasdasd"
},
"profession": "engineer",
"party": "democrat"
},
{
"data": "sampledata2",
"addressdata": {
"isTest": false,
"address": "virginia",
"zipcode": 20120,
"city": "Centreville",
"randomstring": "zabcdabcd:tghkjnkasd:gasdasdasd"
},
"profession": "teacher",
"party": "republican"
}
]
]
从下面的文章中,我可以得到 json 作为原始字符串。 https://docs.databricks.com/spark/latest/structured-streaming/streaming-event-hubs.html
但我无法使用 get_jon_object 从字符串中提取单个项目。我认为问题在于字符串不是单个 json 对象,它是 json 数组的数组。因此,get_json_object 无法解析它。
val outputDf = streamingInputDf.select(
get_json_object(($"body").cast("string"), "$.data").alias("data"),
get_json_object(($"body").cast("string"), "$.addressdata").alias("addressdata"),
get_json_object(($"body").cast("string"), "$.profession").alias("profession"),
get_json_object(($"body").cast("string"), "$.party").alias("party"),
date_format($"enqueuedTime", "dd.MM.yyyy").alias("day"),
date_format($"enqueuedTime", "HH").cast("int").alias("hour") ,
when(date_format($"enqueuedTime", "mm").cast("int")<=15,1)
.when(date_format($"enqueuedTime", "mm").cast("int")>15 && date_format($"enqueuedTime", "mm").cast("int")<=30,2)
.when(date_format($"enqueuedTime", "mm").cast("int")>30 && date_format($"enqueuedTime", "mm").cast("int")<=45,3)
.otherwise(4).alias("minute")
)
任何人有任何建议,如何优雅地解析数据并从字符串中提取个人信息?有没有类似get_json_object的方法可以从json数组中提取数据?
PS:我在一行中得到了 json 数组。不像上面提到的那样。
【问题讨论】:
标签: json apache-spark spark-streaming jsonparser