Dataframe 关于在具有pyspark的数据帧上使用udf函数的列文字的错误

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

我试图在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.
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,我可以在函数中创建列表。一切都很好。谢谢