2017-09-18 9 views
0

私はDataFrameをウィンドウに分割しようとしています。そして、すべての列とウィンドウに対してSparkのPythonインタフェースを使ってカスタム関数(udf)を使います。これはうまくいきませんPysparkはウィンドウのUDFを定義します

w = Window().partitionBy(["col"]).rowsBetween(-sys.maxsize, sys.maxsize) 

def median_polish(rows, cols, values): 
    // shape values as matrix defined by rows/cols 
    // compute median polish 
    // cast matrix back to vector 
    return values 
med_pol_udf = func.udf(median_polish, DoubleType()) 

for x in df.columns: 
    if x.startswith("some string"): 
     df = df.withColumn(x, med_pol_udf("rows", "cols", x).over(w)) 

これはまったく可能ですか?または、Scalaでこれを行う必要がありますか?

答えて

1

私は考えていたのですが、最初に同じウィンドウを使用して列を作成でき、その列が一意のパーティション番号を保持し、その列に対してntile操作を実行することができますそのウィンドウ上のすべての列の中央値が必要です。

関連する問題