import pandas as pd
from pymorphy2 import MorphAnalyzer
from pyspark.sql import SparkSession
from pyspark.sql import types as T
from pyspark.sql import functions as F
spark = SparkSession.builder.appName("udf").getOrCreate()
def gender(s):
m = MorphAnalyzer()
return m.parse(s)[0].tag.gender
gen = F.udf(gender, T.StringType())
df = spark.createDataFrame(pd.DataFrame({"name": ["кирилл", "вавила"]}))
df.select(gen("name").alias("gender")).show()
и более или менее ожидаемо получаю следующее сообщение об ошибке:
ERROR Executor: Exception in task 2.0 in stage 29.0 (TID 151)
net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for pyspark.cloudpickle.cloudpickle._make_skeleton_class). This happens when an unsupported/unregistered class is being unpickled that requires construction arguments. Fix it by registering a custom IObjectConstructor for this class.
at net.razorvine.pickle.objects.ClassDictConstructor.construct(ClassDictConstructor.java:23)
at net.razorvine.pickle.Unpickler.load_reduce(Unpickler.java:759)
at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:199)
Какой самый простой способ обойти ошибку (если она есть)?
Я пробую следующий код: [code]import pandas as pd from pymorphy2 import MorphAnalyzer from pyspark.sql import SparkSession from pyspark.sql import types as T from pyspark.sql import functions as F
df.select(gen("name").alias("gender")).show() [/code] и более или менее ожидаемо получаю следующее сообщение об ошибке: [code]ERROR Executor: Exception in task 2.0 in stage 29.0 (TID 151) net.razorvine.pickle.PickleException: expected zero arguments for construction of ClassDict (for pyspark.cloudpickle.cloudpickle._make_skeleton_class). This happens when an unsupported/unregistered class is being unpickled that requires construction arguments. Fix it by registering a custom IObjectConstructor for this class. at net.razorvine.pickle.objects.ClassDictConstructor.construct(ClassDictConstructor.java:23) at net.razorvine.pickle.Unpickler.load_reduce(Unpickler.java:759) at net.razorvine.pickle.Unpickler.dispatch(Unpickler.java:199) [/code] Какой самый простой способ обойти ошибку (если она есть)?