UDF无效的参数错误,即使python函数按预期运行

时间:2018-08-09 13:14:02

标签: python apache-spark pyspark

我在pyspark(称为GPS)上有一个DataFrame,我想获取其列的数据作为列表,每列的每一行都是列表的元素,因此我使用了以下列表理解:

 ls = [x.GPS_COORDINATES for x in GPS.collect()]

当我尝试将其作为UDF传递并应用于整个DataFrame时,它按预期工作,如下所示:

 from pyspark.sql.types import ArrayType, StringType
 import pandas as pd

 def col_pipe_duplicater(col):
     ls = [x.GPS_COORDINATES for x in col.collect()]
     return ls

 pipe_remover_udf = udf(col_pipe_duplicater)#, ArrayType(StringType()))

 (
     GPS.select('GPS_COORDINATES',
         GPS.withColumn('New_col', pipe_remover_udf('GPS_COORDINATES')))
 )

我收到以下错误:

Invalid argument, not a string or column: DataFrame[GPS_COORDINATES: string, New_col: string] of type <class 'pyspark.sql.dataframe.DataFrame'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.

关于如何调试此方法的任何想法? (如果需要,我在MacBook Pro上将Jupyter Docker Stack(pyspark-notebook)与Spark 2.3.1一起使用)

非常感谢

0 个答案:

没有答案