我正在尝试将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中执行此操作?
答案 0 :(得分:1)
我认为这是不可能的,但我想到的另一种解决方案是你可以先用同一个窗口创建一个列,然后该列保存唯一的分区号然后在该列上执行ntile操作就可以得到你想要的该窗口上所有列的中值。