当前位置: 首页 > 知识库问答 >
问题:

如何在spark sql聚合中添加三个整数列

丁承德
2023-03-14
val df = sqlContext.phoenixTableAsDataFrame(
  Metadata.tables(A.Test), Seq("ID", "date", "col1", "col2","col3"),
  predicate = Some("\"date\" = " + date), zkUrl = Some(zkURL))
val df1 = df.groupBy($"ID", $"date").agg(
  sum($"col1" + $"col2" + $"col3").alias("col4"))
ID,date,col1,col2,col3
1,2017-01-01,5,10,12
2,2017-01-01,6,9,17
3,2017-01-01,2,3,7
4,2017-01-01,5,11,13
ID,date,col4 
1,2017-01-01,27
2,2017-01-01,32
3,2017-01-01,12
4,2017-01-01,29

共有1个答案

严书
2023-03-14

我用下面的代码得到了一个正确的结果:

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Row}
import org.apache.spark.sql.functions.{col, sum}
import org.apache.spark.sql.types.{IntegerType,  StructField, StructType}

  val rowsRdd: RDD[Row] = spark.sparkContext.parallelize(
    Seq(
      Row(1, 1, 5, 10, 12 ),
      Row(2, 1, 6, 9,  17 ),
      Row(3, 1, 2, 3,  7),
      Row(4, 1, 5, 11, 13)

    )
  )

  val schema: StructType = new StructType()
    .add(StructField("id",    IntegerType,  false))
    .add(StructField("date",  IntegerType, false))
    .add(StructField("col1",  IntegerType, false))
    .add(StructField("col2",  IntegerType, false))
    .add(StructField("col3",  IntegerType, false))
  val df0: DataFrame = spark.createDataFrame(rowsRdd, schema)

  val df = df0.groupBy(col("id"), col("date")).agg(sum(col("col1") + col("col2") + col("col3")).alias("col4")).sort("id")

  df.show()

结果是:

+---+----+----+
| id|date|col4|
+---+----+----+
|  1|   1|  27|
|  2|   1|  32|
|  3|   1|  12|
|  4|   1|  29|
+---+----+----+

这是你需要的吗?

 类似资料:
  • 我有一个elasticsearch请求如下: 我想在这个请求中添加分页,就像 我搜索了很多,找到了一个关于它的链接:https://github.com/elastic/elasticsearch/issues/4915. 但我仍然没有得到实现方法。 有没有办法通过Elasticsearch本身而不是我的应用程序来实现它?

  • 问题内容: 我正在用Java编写密码,但不能做以下事情:我想编辑char数组的值来对其进行加密 我应该怎么做? 我不知道改变每个字符的ASCII值可能是答案。这就是为什么我问你们! 问题答案: 您可以在中添加一个,但结果是- 除非使用复合赋值运算符,否则必须将其转换回数组中: 要么 但是,通常这 不是 执行加密的适当方法。您通常会遇到无法打印的字符,甚至在Unicode中甚至没有特定含义的字符。取

  • 在android studio中,我试图放入一个整数的ArrayList中,其中包含标签id如下所示

  • 问题内容: 我只是在学习MySQL-是否有组合(或嵌套)聚合函数的方法? 给定一个查询: 这将给我每个用户回答的问题数量。我真正想要的是每个用户回答的平均问题数量…… 计算此统计信息的正确方法是什么? 如果有可能,是否有办法针对每个问题分解此统计信息?(用户可以多次回答相同的问题)。就像是: 问题答案: 您必须使用子查询: 您不能将一个聚合与另一个聚合一起包装。如果MySQL支持分析/排序/窗口功

  • 抱歉,如果已经问过了,但一直潜伏在SO周围,找不到任何适合我需要的东西。 基本上,我在使用ES的第一次快速尝试中试图实现的是在术语聚合中添加更多计数器。 快速尝试一下,我将以下请求发送给ES。 我现在得到的只是样本在文档中显示的内容。 但是,我真的不知道如何在桶中包含更多的内部聚合。会导致这样的文档的东西。 我应该如何构造聚合,以便按桶包含这些聚合?