python - 我可以将 spark 数据帧作为参数发送给 pandas UDF
问题描述
是否可以将 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:参数无效,不是字符串或列:<class 'pyspark.sql.dataframe.DataFrame'> 类型的 DataFrame[]。对于列文字,使用“lit”、“array”、“struct”或“create_map”函数。
提前致谢!!!
解决方案
一般来说, aPandas UDF
会采取Pandas.Series
. 您定义的count_udf
函数只是一个普通函数,它接受一个pandas DataFrame并返回一个pandas DataFrame。
如果您想将spark DataFrame转换为pandas DataFrame,那么您可以尝试以下操作:
pandas_df = df.toPandas()
您可以参考以下链接以更好地了解如何应用 panda UDF: