2017-09-18 51 views
0

我想將一個DataFrame分區到Windows中,然後爲每個列和窗口使用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操作,你可以有你需要該窗口中所有列的中值。