带有 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有 Pandas 矢量化 UDF 的 Spark 3

Pyspark - 调用 pandas_udf 时出错,结果返回 Series.interpolate()

为啥我的应用程序不能以 pandas_udf 和 PySpark+Flask 开头?

如何在 pyspark 中加入带有熊猫数据框的配置单元表?

Spark 2.4 上带有字典的 UDF

来自 RDD 的每个键的 PySpark 不同列表