解析存储为字符串Spark的结构数组列



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

[{"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"")

错误消息显示其中一条无法解析的记录。调试它的一般方法是查看该记录,并尝试在外部解析它以查找spark。您可以将它粘贴到支持JSON的文本编辑器中,看看它是否突出显示了任何问题。一旦发现问题,请确保检查是否有其他行存在相同的问题。

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

最新更新