json - 从 Spark 2.3 开始,当引用的列仅包含内部损坏记录列时,不允许来自原始 JSON/CSV 文件的查询
问题描述
我有一个 json 文件:
{
"a": {
"b": 1
}
}
我正在尝试阅读它:
val path = "D:/playground/input.json"
val df = spark.read.json(path)
df.show()
但得到一个错误:
线程“main”org.apache.spark.sql.AnalysisException 中的异常:从 Spark 2.3 开始,当引用的列仅包含内部损坏记录列(默认命名为 _corrupt_record)时,不允许来自原始 JSON/CSV 文件的查询。例如: spark.read.schema(schema).json(file).filter($"_corrupt_record".isNotNull).count() 和 spark.read.schema(schema).json(file).select("_corrupt_record" )。节目()。相反,您可以缓存或保存解析的结果,然后发送相同的查询。例如,val df = spark.read.schema(schema).json(file).cache() 然后 df.filter($"_corrupt_record".isNotNull).count().;
所以我尝试按照他们的建议缓存它:
val path = "D:/playground/input.json"
val df = spark.read.json(path).cache()
df.show()
但我不断收到同样的错误。
解决方案
您可以尝试这两种方法中的任何一种。
选项 1:@Avishek Bhattacharya 在上面回答的单行 JSON。
Option-2:在代码中添加读取多行 JSON 的选项,如下所示。您还可以读取嵌套属性,如下所示。
val df = spark.read.option("multiline","true").json("C:\\data\\nested-data.json")
df.select("a.b").show()
这是选项 2 的输出。
20/07/29 23:14:35 INFO DAGScheduler: Job 1 finished: show at NestedJsonReader.scala:23, took 0.181579 s
+---+
| b|
+---+
| 1|
+---+
推荐阅读
- reactjs - 将 redux 与 --template redux 一起使用或手动安装
- grep - 如何使用正则表达式前瞻 grep
- browserstack - Browserstack 自动过期时间
- web-applications - 如何使我的网络应用程序与我的网站不同?
- html - 有没有一种方法可以将垂直滑块与下面的其他网站部分隔离开来?
- r - 根据条件在R中的行中的值之间填充值
- python - 在 Tensorflow 的 Metric 中转换 y_pred 的最佳实践
- c# - Tensorflow.InvalidArgumentError: '不能挤压昏暗 [1],预期维度为 1,得到 3 [[{{node InceptionV1/Logits/SpatialSqueeze}}]]'
- macos - 为什么 PyQt 菜单在 macOS 上被冻结?
- wxpython - wxEVT_ENTER_WINDOW 不会改变按钮背景颜色