0
Pyspark APIには、中央値を除く多くの集計関数が用意されています。 Spark 2にはapproxQuantileが付属していますが、これはおおよその分位数を示しますが、正確な中央値は計算するのに非常に高価です。スパークデータフレームの値の列の中央値を計算するPyspark方法がありますか?Python Dataframe APIでApache Sparkの中央値を見つけるにはどうすればいいですか?
Pyspark APIには、中央値を除く多くの集計関数が用意されています。 Spark 2にはapproxQuantileが付属していますが、これはおおよその分位数を示しますが、正確な中央値は計算するのに非常に高価です。スパークデータフレームの値の列の中央値を計算するPyspark方法がありますか?Python Dataframe APIでApache Sparkの中央値を見つけるにはどうすればいいですか?
次は、Python(Spark 1.6 +)でDataframe APIを実装した実装例です。
import pyspark.sql.functions as F
import numpy as np
from pyspark.sql.types import FloatType
それではは "salaries" sparkのdataframeであるIn顧客のための毎月の持っていると仮定しましょうsalaries。
月を| customer_id |給与
、我々はすべての月
を通じて顧客ごとの給与の中央値を見つけたいステップ1:給与に集約:中央
def find_median(values_list):
try:
median = np.median(values_list) #get the median of values in a list in each row
return round(float(median),2)
except Exception:
return None #if there is anything wrong with the given values
median_finder = F.udf(find_median,FloatType())
ステップ2を計算するために、ユーザー定義関数を書きますそれぞれの行の給与リストにそれらを集めることによって計算されます。
salaries_list = salaries.groupBy("customer_id").agg(F.collect_list("salary").alias("salaries"))
ステップ3:給与計算で、median_finder udfを呼び出します。col新しい列として中央値を追加する
salaries_list = salaries_list.withColumn("median",median_finder("salaries"))
np.nanmedian(values_list)を使用するとNaNが無視され、時にはより良い選択です –