【发布时间】:2017-06-12 22:18:01
【问题描述】:
我试图在 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)
我的意图是在使用groupBy 之后添加count(),以获取匹配timePeriod 列的每个值的记录数,打印\显示为输出。
尝试使用 groupBy(..).count().agg(..) 时出现异常。
有什么方法可以同时实现count() 和agg().show() 打印,而无需将代码拆分为两行命令,例如:
new_log_df.withColumn(..).groupBy(..).count()
new_log_df.withColumn(..).groupBy(..).agg(..).show()
或者更好的是,将合并的输出合并到agg.show() 输出 - 一个额外的列,说明与行的值匹配的记录计数。例如:
timePeriod | Mean | Stddev | Num Of Records
X | 10 | 20 | 315
【问题讨论】:
标签: java scala apache-spark pyspark apache-spark-sql