Spark 3.5 中的 RowEncoder.apply(schema).resolveAndBind() 和 Row/InternalRow 序列化器/反序列化器等效项

问题描述 投票:0回答:1

我们在 Spark 3.1 中使用

RowEncoder.apply(schema).resolveAndBind()
来创建
ExpressionEncoder[row]
并从中创建序列化器和反序列化器。

val encoder = Encoders.row(schema).resolveAndBind()
val serializer = encoder.createSerializer()
val deserializer = encoder.createDeserializer()

我们必须升级到 Spark 3.5,而

RowEncoder.apply()
在 Spark 3.5 中不可用。我知道我们可以使用
Encoders.row(schema)
来替换 RowEncoder.apply(schema),但是如何为 Row 到
internalRow
以及相反的转换创建序列化器和反序列化器?

我尝试了解如何使用

Encoder[Row]
但仍然不明白如何创建序列化器/反序列化器

scala apache-spark apache-spark-sql apache-spark-dataset apache-spark-encoders
1个回答
0
投票
// currently in 3.5/4 prev it's an ExpressionEncoder
val renc = Encoders.row(structType).asInstanceOf[ExpressionEncoder]
val encoder = renc.resolveAndBind()
val serializer = encoder.createSerializer()
val deserializer = encoder.createDeserializer()

应该没问题(请参阅此处了解 .row 是 ExpressionEncoder)。 看看你对此有什么用例会很有趣,它是非常内部的,直接调用resolveAndBind可能会导致问题(对于表达式,你最好将编码器作为要解析的参数),可能有更好的方法.

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.