我有以下原始消息,需要使用 ScalaPB 通过 Spark 编写:
message EnforcementData
{
required int32 id = 1;
required int32 source = 2;
required int32 flagsEnforceOption = 4;
required int32 categoryEnforceOption = 5;
optional TypeA a= 100;
optional TypeB b= 101;
}
TypeA
并且TypeB
是接收方的子类EnforcementData
,它使用 protobuf-net 来反序列化。
现在,我的 Spark 数据框可以包含 a 列或 b 列。假设, df 是我的数据框,我称之为:
df.withColumn(b, null).as[EnforcementData].map(_.toByteArray)
对于 TypeA 消息df.withColumn(a, null).as[EnforcementData].map(_.toByteArray)
用于 B 类消息
但是使用 protobuf-net 反序列化消息的接收器会引发 StackOverflow 异常。我还尝试传递一个虚拟案例类而不是 null ,但它似乎仍然不起作用。
请让我知道如何处理?