【问题标题】:Is ther any way to check what is the actual corrupt record in a json file有什么方法可以检查 json 文件中的实际损坏记录是什么
【发布时间】:2020-03-13 18:57:18
【问题描述】:

我的 Json 文件如下所示

val json=
  """{
    "a":1,
    "b":2
    "c":3
  }"""

val data = spark.read.json(Seq(json).toDS())
val data2=data.toDF()
data2.show(false)

当我运行此代码时,我得到一个名为“_corrupt_record”的表。我知道这是因为我在 json 字符串的第二行中缺少一个“,”。

但是有什么方法可以识别实际错误。我想要一个像

这样的打印语句

",在您的 jsn 文件中的 "b":2 附近丢失了"

【问题讨论】:

  • 您可以接受使用第 3 方 JSON 解析器吗?
  • 不@Andriy..这是不可接受的。但是你可以给出解决方案。我可以试一试
  • 这个想法是在出现错误的情况下使用dijon 之类的解析器对其进行解析,它会抛出一个具有确切位置的异常和一个小的十六进制转储,例如here

标签: json scala dataframe apache-spark


【解决方案1】:

这里有两个独立的问题:

  1. Spark 的 JSON 文件格式需要 JSONlines 格式的数据,即每行一条 JSON 记录。您的示例表明您的 JSON 记录跨越多行。如果您想使用 Spark 直接读取 JSON,则必须解决此问题。

  2. 即使 JSON 是每行一条记录,也存在某些记录可能已损坏并包含无效 JSON 的用例。这个问题属于处理未知质量数据的一般模式。 Spark 的本机数据源不太适合此任务。为此,我们开源了spark-records。 (另见Spark Summit talk。)

spark-records 提供了一个行级结构化日志,它将错误、警告和调试/信息消息(包括完整的结构化堆栈跟踪)与嵌套原因与每行输入数据相关联。我们为不可信的 JSON 数据的用例创建了 spark-records。

使用 Spark 记录,您可以将数据加载为文本行,解析 JSON 并发出您需要的任何错误、警告等。然后,您可以查询输出以区分成功与失败,包括收集有关错误类型、错误原因等的统计信息。请参阅root cause analysis with spark-records

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多