gpt4 book ai didi

dataframe - 在带有pyspark的数据帧上使用udf函数的列文字错误

转载 作者:行者123 更新时间:2023-12-03 17:14:40 29 4
gpt4 key购买 nike

我正在尝试在带有 pyspark 的数据帧上使用 udf 函数,但收到有关列文字的错误并建议我使用“lit”、“array”、“struct”或“create_map”函数。我不清楚如何做到这一点。

from pyspark.sql.types import IntegerType
from pyspark.sql.functions import udf

def compareElem(elem):
return elem[1]

def getSmallest(type, final_list):
final_list.sort(key=compareElem)
print(final_list)
l = final_list[0][0]
print('idx=', l)
if type == 1:
l = (((l/4)+1)*4)-1

return l

功能在列表输入上正常工作
getSmallest(0, [ ( 0, 1), (1, 1.1), (2, 0.5) ])

返回
[(2, 0.5), (0, 1), (1, 1.1)] 
('idx=', 2)

但是在这里与 udf 和 dataframe 列一起使用时失败
func_udf = udf(getSmallest, IntegerType())

raw_dataset_df = raw_dataset_df.withColumn('result',func_udf(
raw_dataset_df['type'], [ ( 0, raw_dataset_df['Icorr_LBT01_R'] ), (1, raw_dataset_df['Icorr_LBT01_S']) ] ));

我收到以下错误
TypeError: Invalid argument, not a string or column: [(0, Column<Icorr_LBT01_R>), (1, Column<Icorr_LBT01_S>)] of type <type 'list'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

不确定这意味着什么或如何解决。我尝试在每个 Column 元素周围环绕 lit,但不清楚这应该做什么,它对我不起作用。

最佳答案

UDF 中的任何参数都应该是一列。
在你的情况下 [ ( 0, raw_dataset_df['Icorr_LBT01_R'] ), (1, raw_dataset_df['Icorr_LBT01_S']) ]不是一列,它是一个列表(python 对象),你不能在你的 udf 中使用它。

关于dataframe - 在带有pyspark的数据帧上使用udf函数的列文字错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53152910/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com