带有 PySpark 2.4 的 Pandas UDF [重复]
Posted
技术标签:
【中文标题】带有 PySpark 2.4 的 Pandas UDF [重复]【英文标题】:Pandas UDF with PySpark 2.4 [duplicate] 【发布时间】:2020-11-05 23:22:06 【问题描述】:我正在尝试根据以下 spark 文档使用 PySpark 2.4、pyarrow 版本 0.15.0 和 pandas 版本 0.24.2 执行 pandas_udf
,但在调用 pandas_udf
函数时遇到问题。
https://spark.apache.org/docs/2.4.0/sql-pyspark-pandas-with-arrow.html
import pandas as pd
from pyspark.sql.functions import col, pandas_udf
from pyspark.sql.types import LongType
# Declare the function and create the UDF
def multiply_func(a, b):
return a * b
multiply = pandas_udf(multiply_func, returnType=LongType())
# The function for a pandas_udf should be able to execute with local Pandas data
x = pd.Series([1, 2, 3])
# Create a Spark DataFrame, 'spark' is an existing SparkSession
df = spark.createDataFrame(pd.DataFrame(x, columns=["x"]))
# Execute function as a Spark vectorized UDF
df.select(multiply(col("x"), col("x"))).show()
Py4JJavaError: An error occurred while calling o64.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, localhost, executor driver): java.lang.IllegalArgumentException
at java.nio.ByteBuffer.allocate(ByteBuffer.java:334)
at org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543)
我尝试设置以下变量:
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled", "true")
spark.conf.set("spark.sql.execution.arrow.pyspark.fallback.enabled", "true")
【问题讨论】:
代码对我有用,spark-version 2.4.5 【参考方案1】:您可以在$SPARK_HOME/conf/spark-env.sh
中设置ARROW_PRE_0_15_IPC_FORMAT=1
。此问题已记录在 https://spark.apache.org/docs/3.0.0-preview/sql-pyspark-pandas-with-arrow.html#compatibiliy-setting-for-pyarrow--0150-and-spark-23x-24x
【讨论】:
我试过这个。如果 pandas udf 函数输入是整数,它的工作,但不是字符串。对此有任何想法吗? @N9909 请打开一个新问题并提供代码的更多详细信息。您的简短描述无法提供帮助。以上是关于带有 PySpark 2.4 的 Pandas UDF [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Pyspark - 调用 pandas_udf 时出错,结果返回 Series.interpolate()