我在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
一起使用)
非常感谢