列摘要(在Spark数据集上实现多维数据集功能)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列摘要(在Spark数据集上实现多维数据集功能)相关的知识,希望对你有一定的参考价值。

对于下面的数据集,我需要根据选定的列获取摘要数据样本数据集包含以下数据。

+---------+----------+--------+---------+
| Column1 | Column2  | Expend | Expend2 |
+---------+----------+--------+---------+
| School1 | Student1 | 5      | 10      |
+---------+----------+--------+---------+
| School1 | Student2 | 11     | 12      |
+---------+----------+--------+---------+
| School2 | Student1 | 6      | 8       |
+---------+----------+--------+---------+
| School2 | Student2 | 7      | 8       |
+---------+----------+--------+---------+

我需要获取Column2的摘要数据,如下所示,

必填格式

+---------+----------+--------+---------+
| Column1 | Column2  | Expend | Expend2 |
+---------+----------+--------+---------+
| School1 | Total    | 16     | 22      |
+---------+----------+--------+---------+
| School1 | Student1 | 5      | 10      |
+---------+----------+--------+---------+
| School1 | Student2 | 11     | 12      |
+---------+----------+--------+---------+
| School2 | Total    | 13     | 16      |
+---------+----------+--------+---------+
| School2 | Student1 | 6      | 8       |
+---------+----------+--------+---------+
| School2 | Student2 | 7      | 8       |
+---------+----------+--------+---------+

我尝试在数据集上使用立方体功能,但这并没有给我预期的结果。我得到null值代替Total这也没关系,但我没有得到上述格式的数据。

我想尝试使用dataset.cube("Column2").agg(sum("Expend1"),sum("Expend2"));

但是上面的代码行只给出了Column2的数据,如何使用上面的返回数据检索Column1值。

答案

从现有的dataframe中,您可以创建一个总数据帧,其中groupBy Column1并将所有Expend列相加为

import org.apache.spark.sql.functions._
val totaldf = df.groupBy("Column1").agg(lit("Total").as("Column2"), sum("Expend").as("Expend"), sum("Expend2").as("Expend2"))

然后你只是merge他们

df.union(totaldf).orderBy(col("Column1"), col("Column2").desc).show(false)

你应该有你想要的输出

+-------+--------+------+-------+
|Column1|Column2 |Expend|Expend2|
+-------+--------+------+-------+
|School1|Total   |16.0  |22.0   |
|School1|Student2|11    |12     |
|School1|Student1|5     |10     |
|School2|Total   |13.0  |16.0   |
|School2|Student2|7     |8      |
|School2|Student1|6     |8      |
+-------+--------+------+-------+

以上是关于列摘要(在Spark数据集上实现多维数据集功能)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Spark(Java)在数据集的所有列上并行应用相同的函数

如何在本地 falcor 模型数据集上实现突变响应

教程 | 使用MNIST数据集,在TensorFlow上实现基础LSTM网络

查询 oracle 多维数据集时出现 java.sql.SqlRecoverableException

Ssas 多维数据集向导不会为事实表列创建度量

多维数据集设计 - 带有附加列的多对多映射的桥接表