使用聚合 spark 和 scala 选择

Posted

技术标签:

【中文标题】使用聚合 spark 和 scala 选择【英文标题】:select with aggrgation spark and scala 【发布时间】:2017-02-27 13:52:30 【问题描述】:

我在 pySpark 中写了这个

result = \
df.select('*', date_format('window_start', 'yyyy-MM-dd hh:mm').alias('time_window')) \
.groupby('time_window') \
.agg('total_score': 'sum')
result.show()

我想让它在 scala 语言中使用 spark 我这样做了我得到了我的错误我没有理解错误因为我是 scala 的新手

val result=df.select('*', date_format(df("time_window"),"yyyy-MM-dd hh:mm").alias("time_window"))
.groupBy("time_window") 
.agg(sum("total_score"))

错误说

重载方法值选择与替代:[U1,U2](c1: org.apache.spark.sql.TypedColumn[org.apache.spark.sql.Row,U1], c2: org.apache.spark.sql.TypedColumn[org.apache.spark.sql.Row,U2])org.apache.spark.sql.Dataset[(U1, U2)] (col: String,cols: String*)org.apache.spark.sql.DataFrame (列: org.apache.spark.sql.Column*)org.apache.spark.sql.DataFrame 不能 应用于(字符, org.apache.spark.sql.Column) Process.scala /Process/src 第 30 行 Scala 问题

如何修复源代码以使其在 scala 下运行

【问题讨论】:

错误提示“无法应用于 (Char, org.apache.spark.sql.Column)”。将“*”替换为“*”(单引号加双引号) 【参考方案1】:

这与您的 pyspark 代码类似

  val data =  spark.sparkContext.parallelize(Seq(
    ("2017-05-21", 1),
  ("2017-05-21", 1),
  ("2017-05-22", 1),
  ("2017-05-22", 1),
  ("2017-05-23", 1),
  ("2017-05-23", 1),
  ("2017-05-23", 1),
  ("2017-05-23", 1))).toDF("time_window", "foo")

  data.withColumn("$time_window", date_format(data("time_window"),"yyyy-MM-dd hh:mm"))
    .groupBy("$time_window")
    .agg(sum("foo")).show

【讨论】:

以上是关于使用聚合 spark 和 scala 选择的主要内容,如果未能解决你的问题,请参考以下文章

Spark Scala - 基于时间段的聚合和透视

Spark:在scala中的数据帧上使用动态过滤器进行聚合

使用scala在Spark中转置DataFrame而不进行聚合

如何使用Scala在Spark中聚合数据?

Dataframe Spark Scala中的最后一个聚合函数

Spark Scala 聚合组 Dataframe