我收到此错误
Can't pickle <class 'google.protobuf.pyext._message.CMessage'>: it's not found as google.protobuf.pyext._message.CMessage
当我尝试在 PySpark 中创建 UDF 时。显然,它使用 CloudPickle 来序列化命令但是,我知道 protobuf 消息包含C++
实现,这意味着它不能被腌制。
我已经尝试找到一种方法来覆盖CloudPickleSerializer
,但是,我无法找到方法。
这是我的示例代码:
from MyProject.Proto import MyProtoMessage
from google.protobuf.json_format import MessageToJson
import pyspark.sql.functions as F
def proto_deserialize(body):
msg = MyProtoMessage()
msg.ParseFromString(body)
return MessageToJson(msg)
from_proto = F.udf(lambda s: proto_deserialize(s))
base.withColumn("content", from_proto(F.col("body")))
提前致谢。