Dataframe 关于在具有pyspark的数据帧上使用udf函数的列文字的错误
我试图在pyspark的数据帧上使用udf函数,但在列文本方面出现错误,建议使用“lit”、“array”、“struct”或“create_map”函数。我不清楚该怎么做Dataframe 关于在具有pyspark的数据帧上使用udf函数的列文字的错误,dataframe,pyspark,user-defined-functions,Dataframe,Pyspark,User Defined Functions,我试图在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): fi
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.
TypeError:参数无效,不是类型为[(0,列),(1,列)]的字符串或列。对于列文字,请使用“lit”、“array”、“struct”或“create_map”函数。
不确定这意味着什么或如何修复。我试着在每个列元素周围包装lit,但不清楚这应该做什么,这对我不起作用 自定义项中的任何参数都应该是列。
在您的例子中,
[(0,raw_dataset_df['Icorr\u LBT01\u R']),(1,raw_dataset_df['Icorr\u LBT01\u S'])]
不是列,而是列表(python对象),您不能在udf中使用它 谢谢你的快速回复。我只是试着修改只传递列数据和索引值周围的lit,我可以在函数中创建列表。一切都很好。谢谢