【发布时间】:2019-02-06 22:00:17
【问题描述】:
我正在尝试创建一个返回 interpolation 函数的 UDF,但该函数正在返回一个带有索引并引发异常的系列。
from pyspark.sql.types import FloatType
@F.pandas_udf(FloatType(), F.PandasUDFType.GROUPED_AGG)
def udf_interpolate(v):
return v.interpolate('linear')
## Test data
df = spark.createDataFrame([
("charles", 1),
("charles", None),
("charles", 3),
], ["name", "value"])
window = Window.partitionBy('name').rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)
df.withColumn('test_interp', udf_interpolate(df.value).over(window)).show()
错误信息:
pyarrow.lib.ArrowInvalid: Could not convert 0 3.0
1 2.0
2 1.0
Name: _0, dtype: float64 with type Series: tried to convert to float32
我尝试强制转换为 float32,但错误仍然存在。我最初的想法是因为我在“预期一个值”中返回了一个包含多个值的系列,但我不知道如何解决这个问题。
如果我改变我的函数,例如,返回一个v.mean(),效果很好。
感谢任何帮助。
谢谢。
【问题讨论】:
标签: python pandas pyspark user-defined-functions