【问题标题】:Apache Spark to_json options parameterApache Spark to_json 选项参数
【发布时间】:2019-04-22 09:32:27
【问题描述】:

我要么不知道我在寻找什么,要么缺少文档。鉴于此,后者似乎是这种情况:

http://spark.apache.org/docs/2.2.2/api/java/org/apache/spark/sql/functions.html#to_json-org.apache.spark.sql.Column-java.util.Map-

"options - 用于控制结构列如何转换为 json 字符串的选项。接受相同的选项和 json 数据源。"

太棒了!那么,我有哪些选择?

我正在做这样的事情:

Dataset<Row> formattedReader = reader
    .withColumn("id", lit(id))
    .withColumn("timestamp", lit(timestamp))
    .withColumn("data", to_json(struct("record_count")));

...我得到了这个结果:

{
  "id": "ABC123",
  "timestamp": "2018-11-16 20:40:26.108",
  "data": "{\"record_count\": 989}"
}

我想要这个(从“数据”中删除反斜杠和引号):

{
  "id": "ABC123",
  "timestamp": "2018-11-16 20:40:26.108",
  "data": {"record_count": 989}
}

这是偶然的选择之一吗?有没有更好的 Spark 指南?关于 Spark 最令人沮丧的部分不是让它做我想做的事,而是缺乏关于它可以做什么的好的信息。

【问题讨论】:

  • 你应该先parse JSON 字符串,然后才应用to_json

标签: java json apache-spark dataframe apache-spark-sql


【解决方案1】:

您对 record_count 字段进行了两次 json 编码。删除 to_json。单独的结构就足够了。

就像把你的代码改成这样。

Dataset<Row> formattedReader = reader
    .withColumn("id", lit(id))
    .withColumn("timestamp", lit(timestamp))
    .withColumn("data", struct("record_count"));

【讨论】:

  • 哈!我发誓我已经尝试过并且得到了例外。有用。谢谢!
  • 欢迎您!它碰巧是最好的。
猜你喜欢
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2011-02-14
  • 2013-10-22
  • 1970-01-01
  • 2017-04-19
相关资源
最近更新 更多