У меня есть столбец 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