聚合后如何包括未聚合的列?

工程师

我正在使用spark-sql-2.4.1v。在这里我有下面的情况

val df = Seq(
  (2010,"2018-11-24",71285,"USA","0.9192019",  "0.1992019",  "0.9955999"),
  (2010,"2017-08-24",71286,"USA","0.9292018",  "0.2992019",  "0.99662018"),
  (2010,"2019-02-24",71287,"USA","0.9392017",  "0.3992019",  "0.99772000")).toDF("seq_id","load_date","company_id","country_code","item1_value","item2_value","item3_value")
.withColumn("item1_value", $"item1_value".cast(DoubleType))
.withColumn("item2_value", $"item2_value".cast(DoubleType))
.withColumn("item3_value", $"item3_value".cast(DoubleType))
.withColumn("fiscal_year", year(col("load_date")).cast(IntegerType))
.withColumn("fiscal_quarter", quarter(col("load_date")).cast(IntegerType))

df.show()


val aggregateColumns = Seq("item1_value","item2_value","item3_value")
var aggDFs = aggregateColumns.map( c => {
    df.groupBy("country_code").agg(lit(c).as("col_name"),sum(c).as("sum_of_column"))
})


var combinedDF = aggDFs.reduce(_ union _)
combinedDF.show

输出数据我越来越喜欢

|country_code|   col_name|     sum_of_column|


|         USA|item1_value|         2.7876054|
|         USA|item2_value|         0.8976057|
|         USA|item3_value|2.9899400800000002|

我需要在输出中获取其他列,即“ seq_id”,“ load_date”和“ company_id”。如何在数据帧的聚合操作后获取它们?

拉姆德夫·沙尔玛

您可以使用窗口函数来显示未聚合的列,也可以说在每一行中显示总和。

如果有帮助,请参见下面的代码片段:

import org.apache.spark.sql.expressions.Window

val df = Seq(
  (2010,"2018-11-24",71285,"USA","0.9192019",  "0.1992019",  "0.9955999"),
  (2010,"2017-08-24",71286,"USA","0.9292018",  "0.2992019",  "0.99662018"),
  (2010,"2019-02-24",71287,"USA","0.9392017",  "0.3992019",  "0.99772000")).
  toDF("seq_id","load_date","company_id","country_code","item1_value","item2_value","item3_value").
  withColumn("item1_value", $"item1_value".cast(DoubleType)).
  withColumn("item2_value", $"item2_value".cast(DoubleType)).
  withColumn("item3_value", $"item3_value".cast(DoubleType)).
  withColumn("fiscal_year", year(col("load_date")).cast(IntegerType)).
  withColumn("fiscal_quarter", quarter(col("load_date")).cast(IntegerType))


val byCountry = Window.partitionBy(col("country_code"))

val aggregateColumns = Seq("item1_value","item2_value","item3_value")
var aggDFs = aggregateColumns.map( c => {
    df.withColumn("col_name",lit(c)).withColumn("sum_country", sum(c) over byCountry)
})

var combinedDF = aggDFs.reduce(_ union _)

combinedDF.
select("seq_id","load_date","company_id","country_code","col_name","sum_country").
distinct.show(100,false)

输出如下:

+------+----------+----------+------------+-----------+------------------+
|seq_id|load_date |company_id|country_code|col_name   |sum_country       |
+------+----------+----------+------------+-----------+------------------+
|2010  |2019-02-24|71287     |USA         |item1_value|2.7876054         |
|2010  |2018-11-24|71285     |USA         |item1_value|2.7876054         |
|2010  |2017-08-24|71286     |USA         |item1_value|2.7876054         |
|2010  |2018-11-24|71285     |USA         |item2_value|0.8976057000000001|
|2010  |2019-02-24|71287     |USA         |item2_value|0.8976057000000001|
|2010  |2017-08-24|71286     |USA         |item2_value|0.8976057000000001|
|2010  |2019-02-24|71287     |USA         |item3_value|2.9899400800000002|
|2010  |2018-11-24|71285     |USA         |item3_value|2.9899400800000002|
|2010  |2017-08-24|71286     |USA         |item3_value|2.9899400800000002|
+------+----------+----------+------------+-----------+------------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何命名聚合列?

来自分类Dev

如何聚合布尔列

来自分类Dev

amqp确认后,聚合器未聚合拆分的消息

来自分类Dev

如何在MongoDB聚合中包括属性

来自分类Dev

如何在聚合后不将其他列包括在GROUP BY中的情况下将其他列添加到SELECT查询中?

来自分类Dev

熊猫在聚合后选择要保存的列

来自分类Dev

Elasticsearch-如何在聚合中包括特定构面值?

来自分类Dev

如何生成包括聚合和分组的Excel图表

来自分类Dev

如何在熊猫中聚合包括丢失的行?

来自分类Dev

迭代序列后未触发聚合序列中的OnComplete

来自分类Dev

根据另一列的聚合将未聚合的列添加到聚合数据集

来自分类Dev

MongoDB聚合,包括丢失的文档

来自分类Dev

猫鼬聚合:如何获取所有未填充列的文档?

来自分类Dev

未选择Mongodb聚合

来自分类Dev

SQL 聚合未执行

来自分类Dev

聚合后的Mongodb分页

来自分类Dev

熊猫聚合-如何保留所有列

来自分类Dev

如何防止聚合函数删除列?

来自分类Dev

如何对 Amazon Redshift 中的列执行聚合 OR

来自分类Dev

PIVOT是否自动获取未聚合列的平均值?

来自分类Dev

按MSSQL中所有未聚合的列分组

来自分类Dev

groupby后折叠标题,每列具有不同的聚合

来自分类Dev

聚合熊猫后保留自定义日期索引/列?

来自分类Dev

在Elastic Search 2.3中聚合后如何选择字段

来自分类Dev

过滤聚合后如何重新排序/ Spring Integration /

来自分类Dev

在nodejs mongodb中使用聚合后如何更新数据

来自分类Dev

聚合物如何更新过滤后的阵列

来自分类Dev

在Elastic Search 2.3中聚合后如何选择字段

来自分类Dev

如何在pivot_table聚合后映射pandas结果?

Related 相关文章

热门标签

归档