小编Une*_*ver的帖子

使用 pandas_udf 返回一个数组

我正在尝试制作一个 pandas UDF,它接受两列具有整数值的数据,并根据这些值之间的差异返回一个小数数组,其长度等于上述差异。

到目前为止,这是我的尝试,我一直在尝试很多不同的方法,试图让它发挥作用,但这是总体思路

from pyspark.sql.functions import pandas_udf, PandasUDFType
from pyspark.sql.types import *
import pandas as pd

@pandas_udf(ArrayType(DecimalType()), PandasUDFType.SCALAR)
def zero_pad(x, y):
  buffer = []
  
  for i in range(0, (x - y)):
    buffer.append(0.0)
  
  return buffer
Run Code Online (Sandbox Code Playgroud)

我的使用方法如下:

df = df.withColumn("zero_list", zero_pad(df.x, df.y))
Run Code Online (Sandbox Code Playgroud)

最终结果是df一个名为“zero_list”的新列,该ArrayType(DecimalType())列看起来[0.0, 0.0, 0.0, ...]长度为(df.x - df.y)

错误消息非常笼统,几乎不值得发布,只是“作业因阶段失败而中止”,它只能追溯到我执行以下操作的代码部分df.show()

Py4JJavaError                             Traceback (most recent call last)
<command-103561> in <module>()
---> 33 df.orderBy("z").show(n=1000)

/databricks/spark/python/pyspark/sql/dataframe.py in show(self, n, truncate, vertical)
    350         """
    351         if …
Run Code Online (Sandbox Code Playgroud)

python user-defined-functions apache-spark pyspark databricks

7
推荐指数
1
解决办法
8936
查看次数