【问题标题】:How to add comma between JSON elements using Spark Scala如何使用 Spark Scala 在 JSON 元素之间添加逗号
【发布时间】:2019-11-20 00:38:53
【问题描述】:

我正在将表数据加载到数据框中并创建多个 JSON 部分文件。数据的结构很好,但是 JSON 中的元素没有用逗号分隔。

这是输出:

{"time_stamp":"2016-12-08 01:45:00","Temperature":0.8,"Energy":111111.5,"Net_Energy":1111.3}
{"time_stamp":"2016-12-08 02:00:00","Temperature":21.9,"Energy":222222.5,"Net_Energy":222.0}

我应该得到这样的东西:

{"time_stamp":"2016-12-08 01:45:00","Temperature":0.8,"Energy":111111.5,"Net_Energy":1111.3},
{"time_stamp":"2016-12-08 02:00:00","Temperature":21.9,"Energy":222222.5,"Net_Energy":222.0}

我该怎么做?

【问题讨论】:

  • 实际上是正确的,因为它是一个多行文件,而不是一个数组。如果您查看 JSON 标准,它不需要逗号。

标签: apache-spark apache-spark-sql to-json


【解决方案1】:

您的输出是正确的 JSONlines 输出:每行一个 JSON 记录,由换行符分隔。行之间不需要逗号。事实上,那将是无效的 JSON。

如果您绝对需要将 Spark 作业的整个输出转换为单个 JSON 对象数组,有两种方法可以做到这一点:

  1. 对于适合驱动程序 RAM 的数据,df.as[String].collect.mkString("[", ",", "]")

  2. 对于不适合驱动程序 RAM 的数据......你真的不应该这样做......但如果你必须这样做,使用 shell 操作以 [ 开头,每个都添加一个逗号输出行并以]结束。

【讨论】:

  • 第三种可能性,如果数据适合执行程序内存,您可以将分区数减少到 1,然后对其应用 foreachPartition
  • @baitmbarek foreachPartition 不返回结果,因此如果弄清楚如何获取数据,就会出现问题。也许你在想mapPartitions 返回一个字符串,然后使用stackoverflow.com/a/48712134/622495 中的想法编写一个巨大的单行文本文件(控制文件名)。
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2019-01-26
相关资源
最近更新 更多