Apache Spark to_json选项参数

时间:2018-11-20 00:26:14

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

我要么不知道我要寻找的内容,要么缺少文档。鉴于这种情况,后者似乎是这样的:

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-用于控制如何将struct列转换为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的最令人沮丧的部分并不是让它做我想要的事情,这是因为缺少关于可以可以做什么的良好信息。

1 个答案:

答案 0 :(得分:1)

您对record_count字段进行了两次json编码。删除to_json。仅struct就足够了。

将代码更改为类似的内容。

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