Spark数据集:数据转换

问题描述 投票:0回答:1

我有一个格式为spark的数据集-

+--------------+--------+-----+
|name          |type    |cost |
+--------------+--------+-----+
|AAAAAAAAAAAAAA|XXXXX   |0.24|
|AAAAAAAAAAAAAA|YYYYY   |1.14|
|BBBBBBBBBBBBBB|XXXXX   |0.78|
|BBBBBBBBBBBBBB|YYYYY   |2.67|
|BBBBBBBBBBBBBB|ZZZZZ   |0.15|
|CCCCCCCCCCCCCC|XXXXX   |1.86|
|CCCCCCCCCCCCCC|YYYYY   |1.50|
|CCCCCCCCCCCCCC|ZZZZZ   |1.00|
+--------------+--------+----+

我想将其转换为类型的对象-

public class CostPerName {
    private String name;
    private Map<String, Double> costTypeMap;
}

我想要的是,

+--------------+--------+--------------------------------------+
|name          |           typeCost.                           |
+--------------+--------+--------------------------------------+
|AAAAAAAAAAAAAA|(XXXXX, 0.24), (YYYYY, 1.14)                   |            
|BBBBBBBBBBBBBB|(XXXXX, 0.78), (YYYYY, 2.67), (ZZZZZ, 0.15)    |
|CCCCCCCCCCCCCC|(XXXXX, 1.86), (YYYYY, 1.50), (ZZZZZ, 1.00)    |
+--------------+--------+--------------------------------------+

即,对于每个名称,我想要一个(类型,成本)的地图

实现此转换的有效方法是什么?我可以使用一些dataFrame转换吗?我尝试了groupBy,但是只有在执行汇总查询(例如sum,avg等)时,该方法才有效。

我有一个火花数据集,其格式为-+ -------------- + -------- + ----- + |名称|类型|成本| + -------------- + -------- + ----- + | AAAAAAAAAAAAAA | XXXXX | 0.24 | | AAAAAAAAAAAAAA | YYYYY | 1.14 | | ...

apache-spark apache-spark-dataset
1个回答
0
投票

您可以将两个列的类型和成本组合成一个新的struct列,然后按名称分组并使用collect_list作为聚合函数:

© www.soinside.com 2019 - 2024. All rights reserved.