json - 使用 Apache Spark 读取 JSON 数组
问题描述
我有一个 json 数组文件,如下所示:
["{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}",{"meta":{"headers":{"app":"music"},"customerId":"2"}}]
我有一个 json 文件,节点如下所示:
我正在尝试通过 spark-shell 在 scala 中读取此文件。
val s1 = spark.read.json("path/to/file/file.json")
但是,这会导致损坏记录错误:
org.apache.spark.sql.DataFrame = [_corrupt_record: string]
我也试过这样读:
val df = spark.read.json(spark.sparkContext.wholeTextFiles("path.json").values)
val df = spark.read.option("multiline", "true").json("<file>")
但仍然是同样的错误。
由于 json 数组包含字符串,而 json 对象可能就是我无法读取它的原因。
任何人都可以阐明这个错误吗?我们如何通过 spark udf 读取它?
解决方案
是的,原因是文本和实际 json 对象的混合。在我看来,这两个条目好像属于一起,所以为什么不将架构更改为这样的:
{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}"}
新行也意味着新记录,因此对于多个事件,您的文件将如下所示:
{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"1\",\"events\":[{\"event_type\":\"ON\"}]}"}
{"meta":{"headers": {"app": "music"},"customerId": "2"},"data": "{\"timestamp\":1616549396892,\"id\":\"2\",\"events\":[{\"event_type\":\"ON\"}]}"}
推荐阅读
- visual-studio-code - VScode webview 扩展 api
- android - FLUTTER:任务':app:compileFlutterBuildDebug'执行失败无法创建父目录
- c++ - 声明与 void 不兼容
- c++ - 函数调用的参数太多,预期单个参数“nums”,有 3 个参数
- windows-installer - 对 BizTalk 生成的 MSI 文件进行产品版本控制
- c# - localhost websocket (wss://localhost:xyz/) 并非对所有用户都可用
- python - 如何在 Jupyter Notebook 中导入特定版本的 numpy?
- java - 我的数组没有到达数组的最后一个元素
- react-native - React Native Linking 抛出错误:无法打开 URL:
- java - 文本上方的 JMenu 图标