2017-06-06 55 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