Pyspark为windows定义UDF

时间:2017-09-18 18:51:46

标签: python pyspark

我正在尝试将DataFrame分区为窗口,然后对于每个列和窗口使用Spark的Python接口使用自定义函数(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 个答案:

答案 0 :(得分:1)

我认为这是不可能的,但我想到的另一种解决方案是你可以先用同一个窗口创建一个列,然后该列保存唯一的分区号然后在该列上执行ntile操作就可以得到你想要的该窗口上所有列的中值。