PySpark UDF在返回cloudpickle时崩溃,带有code()参数13的loads(obj,encoding=encoding)必须是str,而不是int,错误为

huwehgph  于 2023-01-20  发布在  Spark
关注(0)|答案(1)|浏览(167)

问题
当运行我的udf(如下所示)时,Python工作线程抛出了一个异常。
文件“C:\PATH\SparkInstallation\spark-3.3.1-bin-hadoop 3\python\lib\pyspark.zip\pyspark\serializers.py”,第471行,在加载中返回cloudpickle。加载(对象,编码=编码)^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^类型错误:code()参数13必须是字符串,而不是整数
我不知道是什么原因导致了这个错误,看起来它可能是由我的代码之外的其他原因导致的。

密码

from pyspark.sql.types import StringType, ArrayType
import re
from pyspark.sql import SparkSession
import pyspark.sql.functions as pysparkfunctions

spark = SparkSession.builder.appName('test').getOrCreate()

savedTweets = spark.read.csv("testData/")

def getHashtags(string):
    return re.findall(r"#(\w+)", string)

getHashtagsUDF = pysparkfunctions.udf(getHashtags, ArrayType(StringType()))

savedTweets = savedTweets.withColumn("hashtags", getHashtagsUDF(savedTweets['tweet']))

savedTweets.show()

其中savedTweets有一个名为“tweet”的列,包含tweet的文本。预期结果是第二个列,给出一个字符串数组,列出使用的hashtags。

UDF示例

给定输入“#a #B #c”,输出['a','b','c']
给定输入“a @B #c”,输出['c']

cngwdvgl

cngwdvgl1#

我也有同样的错误。通过将python版本降级到3. 7解决了这个问题
编辑:它也适用于3.10.9

相关问题