解析存储为字符串 Spark

时间:2021-07-21 11:18:27

标签: json scala apache-spark apache-spark-sql

我将下面的结构数组作为字符串列存储在我的输入文件中。输入文件无法修改,因为它是从上游团队发送的。

[{"col1":"B078Z655KG","col2":2,"col3":351,"col4":"kindle_edition","col6":1,"transaction_info":[]},{"col1":"0736973540","col2":1,"col3":14,"col4":"paperback","col5":1,"col6":[]}]

我的代码:

val ds = df.select(col("faceout_features"))

val schema = StructType(Seq(StructField(“col1”, CatalystSqlParser.parseDataType("string")), StructField(“col2”, CatalystSqlParser.parseDataType("string"))))

val dfFromCSVJSON = df.select(col(“col1”), from_json(col("faceout_features"),schema).as("jsonData")) .select(“col1”,”jsonData.*")

在尝试解析为 json 时,我将输出列设为 null,而输入记录被处理为损坏的记录。感谢您在调试文件格式问题方面的任何帮助。

错误:

Found at least one malformed records (sample: "[{""col1"":""B078Z655KG"")

1 个答案:

答案 0 :(得分:0)

错误消息显示无法解析的记录之一。调试这个的一般方法是查看该记录并尝试在外部解析它以获取火花。您可以将其粘贴到支持 JSON 的文本编辑器中,看看它是否突出显示了任何问题。发现问题后,请务必检查其他行是否存在相同问题。

对于问题中显示的特定错误消息,由于双引号,我们已经可以判断它不是有效的 JSON。换句话说,""B078Z655KG"" 应该是 "B078Z655KG"