2017-06-06 58 views
0

对于下面的数据帧为什么PySpark中的agg()只能一次总结一列?

df=spark.createDataFrame(data=[('Alice',4.300),('Bob',7.677)],schema=['name','High']) 

当我试图找到分钟&最多我只在输出端获得最小值。

df.agg({'High':'max','High':'min'}).show() 

+-----------+ 
|min(High) | 
+-----------+ 
| 2094900| 
+-----------+ 

为什么不能AGG()既提供最大&分钟像熊猫吗?

回答

3

正如你可以看到here

agg(* exprs)

Compute aggreg ates并将结果作为DataFrame返回。

可用的集合函数是avg,max,min,sum,count。

如果exprs是从字符串到字符串的单个字典映射,那么键是要在其上执行聚合的列,并且该值是聚合函数。

或者,exprs也可以是聚合列表达式的列表。

参数:exprs - 从列名(字符串)到聚合函数(字符串)或列的列表的字典映射。

您也可以使用列的列表和应用,你需要在每列,这样的功能:

>>> from pyspark.sql import functions as F 

>>> df.agg(F.min(df.High),F.max(df.High),F.avg(df.High),F.sum(df.High)).show() 
+---------+---------+---------+---------+ 
|min(High)|max(High)|avg(High)|sum(High)| 
+---------+---------+---------+---------+ 
|  4.3| 7.677| 5.9885| 11.977| 
+---------+---------+---------+---------+ 
0

是的,你可以使用最小和最大的功能如下

import org.apache.spark.sql.functions._ 

df.agg(min($"High"), max($"High")).show() 

这是一个Scala代码做到这一点,将其转为pyspark