属性错误:模块'pyspark.sql.types'没有属性'ListType'


我定义了一个UDF,它将返回3个值。1是一个整数值。2是浮点值,3是列表。
mylist = [8,9.5,10,11,12]
def Calculat(mylist):
x = mylist[0]
y = mylist[1]
list = mylist[-3,-2,-1]
return x, y, list

然后我想用这个代码运行这个来定义3种类型

func = F.udf(lambda x: calculate(x), T.StructType(
[T.StructField("val1", T.IntegerType(), True),
T.StructField("val2", T.FloatType(), True),
T.StructField("val3", T.ListType(), True)]))

但是我得到这个错误

AttributeError:模块"pyspark.sql.types"没有属性"ListType">

ListType在Pyspark中不可用。您需要更改为ArrayType,它总是需要一个已定义的元素类型。

func = F.udf(lambda x: calculate(x), T.StructType([
T.StructField("val0", T.IntegerType(), True),
T.StructField("val1", T.FloatType(), True),
T.StructField("val2", T.ArrayType(T.IntegerType()), True),
]))

我也有一个小小的想法。在开发UDF函数时,我非常喜欢UDF装饰器。我真的很喜欢这种方法,因为在我看来,它让代码看起来更干净。您的代码如下所示:

returnType=T.StructType([
T.StructField("val0", T.IntegerType(), True),
T.StructField("val1", T.FloatType(), True),
T.StructField("val2", T.ArrayType(T.IntegerType()), True),
])
@F.udf(returnType=returnType)
def calculate(mylist):
x = mylist[0]
y = mylist[1]
list = mylist[-3,-2,-1]
return x, y, list

最新更新