scala - 如何为要在 from_json 中使用的 json 定义模式来解析值
问题描述
我正在尝试提出一个模式定义来解析我正在使用 from_json 的数据帧字符串列中的信息。我需要帮助来定义模式,但不知何故我做得不对。
这是我拥有的Json
[
{
"sectionid":"838096e332d4419191877a3fd40ed1f4",
"sequence":0,
"questions":[
{
"xid":"urn:com.mheducation.openlearning:lms.assessment.author:qastg.global:assessment_item:2a0f52fb93954f4590ac88d90888be7b",
"questionid":"d36e1d7eeeae459c8db75c7d2dfd6ac6",
"quizquestionid":"d36e1d7eeeae459c8db75c7d2dfd6ac6",
"qtype":"3",
"sequence":0,
"subsectionsequence":-1,
"type":"80",
"question":"<p>This is a simple, 1 question assessment for automation testing</p>",
"totalpoints":"5.0",
"scoring":"1",
"scoringrules":"{\"type\":\"perfect\",\"points\":5.0,\"pointsEach\":null,\"rules\":[]}",
"inputoption":"0",
"casesensitive":"0",
"suggestedscoring":"1",
"suggestedscoringrules":"{\"type\":\"perfect\",\"points\":5.0,\"pointsEach\":null,\"rules\":[]}",
"answers":[
"1"
],
"options":[
]
}
]
}
]
我想解析这些信息,这将导致列 sectionid 、 sequence 、 xid 、 question.sequence 、 question.question(question text) 、 answers
这是我所拥有的我已经定义了一个这样的测试模式
import org.apache.spark.sql.types.{StringType, ArrayType, StructType,
StructField}
val schema = new StructType()
.add("sectionid", StringType, true)
.add("sequence", StringType, true)
.add("questions", StringType, true)
.add("answers", StringType, true)
finalDF = finalDF
.withColumn( "parsed", from_json(col("enriched_payload.transformed"),schema) )
但是我在结果列中得到 NULL 的原因是我认为我的架构不正确。我正在努力想出正确的定义。如何提出正确的 json 模式定义?
我正在使用火花 3.0
解决方案
试试下面的代码。
import org.apache.spark.sql.types._
val schema = ArrayType(
new StructType()
.add("sectionid",StringType,true)
.add("sequence",LongType,true)
.add("questions", ArrayType(
new StructType()
.add("answers",ArrayType(StringType,true),true)
.add("casesensitive",StringType,true)
.add("inputoption",StringType,true)
.add("options",ArrayType(StringType,true),true)
.add("qtype",StringType,true)
.add("question",StringType,true)
.add("questionid",StringType,true)
.add("quizquestionid",StringType,true)
.add("scoring",StringType,true)
.add("scoringrules",StringType,true)
.add("sequence",LongType,true)
.add("subsectionsequence",LongType,true)
.add("suggestedscoring",StringType,true)
.add("suggestedscoringrules",StringType,true)
.add("totalpoints",StringType,true)
.add("type",StringType,true)
.add("xid",StringType,true)
)
)
)
推荐阅读
- visual-studio - 在没有属性窗口的设计器中更改 .Text-property
- regex - 如何删除两个字符之间的所有空格?
- asp.net-core - 如何在 ASP NET 中将内存数据与磁盘同步
- r - 根据三列删除重复行
- firebase - 向 Firestore 中的特定用户 uid 发送通知
- python - Trie 字典中的前缀搜索
- java - 以斜杠将字符串解析为 JSON 时出错
- javascript - 如何模拟 useState 钩子实现,以便它在测试期间实际更改状态
- angular - 如何从 Angular 4 中的 JSON 文件访问环境变量?
- fullpage.js - fullPage.js 在组件上方和下方具有正常站点