PySpark UDF在返回cloudpickle时崩溃.带有code()参数13的loads(obj,encoding



问题

当运行我的udf(如下所列(时,Python工作线程会抛出异常。例外

文件"C: \PATH\SparkInstallation\spark-3.3.1-bin-hadoop3\python\lib\pyspark.zip\pyspark\serializers.py";,第471行,荷载return cloudpickle.loads(obj,encoding=encoding(^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^TypeError:code((参数13必须是str,而不是int

我不知道是什么原因导致了这个错误,而且它似乎是由我的代码之外的其他原因引起的。

代码

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的文本。预期的结果将是第二列,它提供了一个字符串数组,列出了使用的标签。

UDF示例

给定输入"0"#a#b#c";,输出[a','b','c']

给定输入"0";a@b#c";,输出

我也有同样的错误。通过将python版本降级为3.7 解决了这个问题

编辑:它也适用于3.10.9

最新更新