簡體   English   中英

在多列Pyspark上進行Groupby操作

[英]Groupby operations on multiple columns Pyspark

我已經應用了groupby並計算了pyspark數據幀中兩個功能的標准偏差

from pyspark.sql import functions as f


val1 = [('a',20,100),('a',100,100),('a',50,100),('b',0,100),('b',0,100),('c',0,0),('c',0,50),('c',0,100),('c',0,20)]
cols = ['group','val1','val2']
tf = spark.createDataFrame(val1, cols)
tf.show() 
tf.groupby('group').agg(f.stddev(['val1','val2']).alias('val1_std','val2_std'))

但這給了我以下錯誤

TypeError: _() takes 1 positional argument but 2 were given

如何在pyspark中執行它?

問題在於stddev函數作用於單個列,而不是像您編寫的代碼中那樣作用於多個列(因此,有關1 vs 2參數的錯誤消息)。 獲得所需結果的一種方法是分別計算每列的標准差:

# std dev for each col
expressions = [f.stddev(col).alias('%s_std'%(col)) for col in ['val1','val2']]
# Now run it
tf.groupby('group').agg(*expressions).show()

#+-----+------------------+------------------+
#|group|          val1_std|          val2_std|
#+-----+------------------+------------------+
#|    c|               0.0|43.493294502332965|
#|    b|               0.0|               0.0|
#|    a|40.414518843273804|               0.0|
#+-----+------------------+------------------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM