如何更改密钥在 Scalding 中的序列化方式?
How do I change how keys are serialized in Scalding?
我在烫烫工作中按自定义类型分组:
typedPipe
.map(someMapper)
.groupBy(_.nonPrimitiveField)
.sum
.write(sink)
在我的输出中,键显示为 toString
输出,这没有用。如何让 scalding 为这些键使用自定义序列化程序?
我目前的解决方法是调用 toTypedPipe
并在映射器中显式调用我的序列化函数,但这似乎很浪费。
接收器是 TypedTsv[(Key, Value)]
,其中 Key
是我想要以不同方式序列化的字段类型。
嗯,Tsv
是一种文本格式,所以,归根结底,一切都变成了字符串。
最简单的方法是只覆盖 Key
类型的 .toString
,或者将其包装到另一个覆盖 .toString
的对象中。或者,只需将其替换为 String
作为最后一步(我认为,这就是您已经在做的事情)。我不确定你说的是 "wasteful" 是什么意思。如果您担心的话,它不会在流程中增加额外的步骤,并且在任何情况下都必须进行到字符串的转换,因此成本是固定的。
typedPipe.
.map(someMapper)
.groupBy(x => beautifulString(x.nonPrimitiveField))
.sum
.write(sink)
我在烫烫工作中按自定义类型分组:
typedPipe
.map(someMapper)
.groupBy(_.nonPrimitiveField)
.sum
.write(sink)
在我的输出中,键显示为 toString
输出,这没有用。如何让 scalding 为这些键使用自定义序列化程序?
我目前的解决方法是调用 toTypedPipe
并在映射器中显式调用我的序列化函数,但这似乎很浪费。
接收器是 TypedTsv[(Key, Value)]
,其中 Key
是我想要以不同方式序列化的字段类型。
嗯,Tsv
是一种文本格式,所以,归根结底,一切都变成了字符串。
最简单的方法是只覆盖 Key
类型的 .toString
,或者将其包装到另一个覆盖 .toString
的对象中。或者,只需将其替换为 String
作为最后一步(我认为,这就是您已经在做的事情)。我不确定你说的是 "wasteful" 是什么意思。如果您担心的话,它不会在流程中增加额外的步骤,并且在任何情况下都必须进行到字符串的转换,因此成本是固定的。
typedPipe.
.map(someMapper)
.groupBy(x => beautifulString(x.nonPrimitiveField))
.sum
.write(sink)