是否可以将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:
- 为pyspark引入矢量化udfs
- Spark Pandas UDF