我可以向pandasUDF发送一个spark数据帧作为参数吗



是否可以将spark数据帧作为参数发送到pandas UDF并获得pandas数据帧作为返回。以下是我正在使用的示例代码集,在调用函数时出错:

import pandas as pd
from pyspark.sql import SparkSession
from pyspark.sql.functions import pandas_udf

spark = SparkSession 
.builder 
.appName("PrimeBatch") 
.master("local[*]") 
.getOrCreate()
srcFile = <Some CSV file>
df = spark.read.option("header",True)
.csv(srcFile)
# Declare the function and create the UDF
@pandas_udf("Count int")
def count_udf(v: pd.DataFrame) -> pd.DataFrame:
return v.count()
p_df = count_udf(df)
p_df

运行代码时出现的错误如下:

TypeError:无效参数,不是字符串或列:类型<的DataFrame[];类"pyspark.sql.dataframe.dataframe">。对于列文字,请使用'lit'、'array'、'struct'或'create_map'函数。

提前感谢

通常情况下,Pandas UDF会取Pandas.Series。您定义的count_udf函数只是一个普通函数,它接受pandas DataFrame并返回pandas DataFrame

如果您想将spark DataFrame转换为pandas DataFrame,则可以尝试以下操作:

pandas_df  = df.toPandas()

您可以参考以下链接来更好地了解如何应用panda UDF:

  1. 为pyspark引入矢量化udfs
  2. Spark Pandas UDF

最新更新