Добавьте ключ JSON в столбец и создайте новый столбец JSON: AnalysisException - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть столбец JSON Array: json1 в dataFrame: df2

val df1 = Seq(
  (1, 11, "n1", "d1"),
  (2, 11, "n3", "d3")
).toDF("id1", "id2", "number", "data")

val df2 = df1.withColumn("json", to_json(struct($"number", $"data"))).groupBy("id1", "id2").agg(collect_list($"json").alias("json1"))

Содержимое df2 равно

+---+---+-----------------------------+
|id1|id2|json1                        |
+---+---+-----------------------------+
|1  |11 |[{"number":"n1","data":"d1"}]|
|2  |11 |[{"number":"n3","data":"d3"}]|
+---+---+-----------------------------+

Я пытаюсь создать еще один JSON, скажемjson2, с ключом в качестве переданной строки, скажем key1 и значением в качестве данных json1

+---+---+--------------------------------------+
|id1|id2|json2                                 |
+---+---+--------------------------------------+
|1  |11 |{"key1":[{"number":"n1","data":"d1"}]}|
|2  |11 |{"key1":[{"number":"n3","data":"d3"}]}|
+---+---+--------------------------------------+

Чтобы добиться того же, я пытаюсь использовать lit и concat method

val df3 = df2.withColumn("json2", concat(lit("{" + "\"key1\"" + ":"), col("json1") ,lit("}")))

, но при выполнении этого я получаю AnalysisException.

org.apache.spark.sql.AnalysisException: cannot resolve 'concat('{"key1":', `json1`, '}')' due to data type mismatch: argument 2 requires string type, however, '`json1`' is of array<string> type.;;

Версии:

Spark: 2.2
Scala: 2.11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...