如何更改密钥在 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)