23

次のコードを使用して、給与がしきい値を超えている人の平均年齢を取得しています。

dataframe.filter(df['salary'] > 100000).agg({"avg": "age"})

列 age は数値 (float) ですが、それでもこのエラーが発生します。

py4j.protocol.Py4JJavaError: An error occurred while calling o86.agg. 
: scala.MatchError: age (of class java.lang.String)

groupBy関数や SQL クエリを使用せずに平均などを取得する他の方法を知っていますか。

4

2 に答える 2

52

集計関数は値で、列名はキーでなければなりません:

dataframe.filter(df['salary'] > 100000).agg({"age": "avg"})

または、次を使用できますpyspark.sql.functions

from pyspark.sql.functions import col, avg

dataframe.filter(df['salary'] > 100000).agg(avg(col("age")))

使用することも可能ですCASE .. WHEN

from pyspark.sql.functions import when

dataframe.select(avg(when(df['salary'] > 100000, df['age'])))
于 2015-09-13T14:52:30.437 に答える