【发布时间】:2018-03-16 09:04:03
【问题描述】:
如何转换如下数据以便将数据存储在 ElasticSearch 中?
这是一个 bean 的数据集,我将按产品将其聚合到 JSON 数组中。
List<Bean> data = new ArrayList<Bean>();
data.add(new Bean("book","John",59));
data.add(new Bean("book","Björn",61));
data.add(new Bean("tv","Roger",36));
Dataset ds = spark.createDataFrame(data, Bean.class);
ds.show(false);
+------+-------+---------+
|amount|product|purchaser|
+------+-------+---------+
|59 |book |John |
|61 |book |Björn |
|36 |tv |Roger |
+------+-------+---------+
ds = ds.groupBy(col("product")).agg(collect_list(map(ds.col("purchaser"),ds.col("amount")).as("map")));
ds.show(false);
+-------+---------------------------------------------+
|product|collect_list(map(purchaser, amount) AS `map`)|
+-------+---------------------------------------------+
|tv |[[Roger -> 36]] |
|book |[[John -> 59], [Björn -> 61]] |
+-------+---------------------------------------------+
这就是我想把它改造成的:
+-------+------------------------------------------------------------------+
|product|json |
+-------+------------------------------------------------------------------+
|tv |[{purchaser: "Roger", amount:36}] |
|book |[{purchaser: "John", amount:36}, {purchaser: "Björn", amount:61}] |
+-------+------------------------------------------------------------------+
【问题讨论】:
-
先用
to_json再用collect_list -
Spark Row to JSON的可能重复
-
你能告诉我你会怎么做吗?您关于可能重复的链接没有将聚合功能涵盖到 json 数组中。
-
太棒了!非常感谢您的帮助 philantrovert !
标签: apache-spark apache-spark-sql