相关疑难解决方法(0)

聚合函数计算Spark中groupBy的使用情况

我试图在pySpark中的一行代码中进行多个操作,并且不确定这是否适用于我的情况.

我的意图是不必将输出保存为新的数据帧.

我目前的代码很简单:

encodeUDF = udf(encode_time, StringType())
new_log_df.cache().withColumn('timePeriod', encodeUDF(col('START_TIME')))
  .groupBy('timePeriod')
  .agg(
    mean('DOWNSTREAM_SIZE').alias("Mean"),
    stddev('DOWNSTREAM_SIZE').alias("Stddev")
  )
  .show(20, False)
Run Code Online (Sandbox Code Playgroud)

我的目的是count()在使用之后添加groupBy,以获得与timePeriod列的每个值匹配的记录计数,打印\显示为输出.

在尝试使用时,groupBy(..).count().agg(..)我得到例外.

是否有任何方法可以实现这两个count()agg() .show()打印,而无需将代码拆分为两行命令,例如:

new_log_df.withColumn(..).groupBy(..).count()
new_log_df.withColumn(..).groupBy(..).agg(..).show()
Run Code Online (Sandbox Code Playgroud)

或者更好的是,将合并的输出输出到agg.show()输出 - 一个额外的列,它表示与行的值匹配的计数记录数.例如:

timePeriod | Mean | Stddev | Num Of Records
    X      | 10   |   20   |    315
Run Code Online (Sandbox Code Playgroud)

java scala apache-spark apache-spark-sql pyspark

30
推荐指数
1
解决办法
5万
查看次数

对spark数据帧的同一列进行多次聚合操作

我有三个字符串类型的数组包含以下信息:

  • groupBy数组:包含我想要对数据进行分组的列的名称.
  • aggregate array:包含我想要聚合的列的名称.
  • operations array:包含我想要执行的聚合操作

我正在尝试使用spark数据帧来实现这一目标.Spark数据框提供了agg(),您可以在其中传递Map [String,String](列名和相应的聚合操作)作为输入,但是我想对数据的同一列执行不同的聚合操作.有关如何实现这一目标的任何建议?

dataframe apache-spark apache-spark-sql

28
推荐指数
3
解决办法
2万
查看次数