如何忽略 MatchError 然后在 spark-sql 中处理一个大的 json 文件?

how to ignore MatchError then processing a large json file in spark-sql?

我正在尝试使用 spark 处理一堆大型 json 日志文件,但每次使用 scala.MatchError 时都会失败,无论我是否提供架构。

我只想跳过与架构不匹配的行,但我在 spark 文档中找不到如何操作。

我知道写一个 json 解析器并将其映射到 json 文件 RDD 可以完成任务,但我想使用 sqlContext.read.schema(schema).json(fileNames).selectExpr(...) 因为它更容易维护。

这将在 Spark 1.6.1 中解决https://issues.apache.org/jira/browse/SPARK-12057

现在您可以编译包含修复程序的 spark 版本(本质上是在 MatchError 上引发解析异常而不是一般异常,然后将记录报告为已损坏 - 请参阅代码 https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/json/JacksonParser.scala