2016-04-10 16 views
0

Ich bin von einem benutzerdefinierten Typ in meinem Verbrühungen Job Gruppierung:Wie ändere ich, wie Schlüssel in Scalding serialisiert werden?

typedPipe 
    .map(someMapper) 
    .groupBy(_.nonPrimitiveField) 
    .sum 
    .write(sink) 

In meiner Ausgabe zeigen die Tasten nach oben als toString Ausgabe, die nicht nützlich ist. Wie kann ich verbrühen einen benutzerdefinierten Serializer für diese Schlüssel verwenden?

Meine aktuelle Problemumgehung ist, toTypedPipe aufzurufen und meine Serialisierungsfunktion explizit in den Mappern aufzurufen, aber das scheint verschwenderisch.

Die Spüle ist eine TypedTsv[(Key, Value)], wo Key der Typ des Feldes ist, das ich gerne serialisieren würde.

+0

Es hängt vom Typ der Senke ab, in die Sie schreiben. Wie erstellst du die Spüle? – Dima

+0

@Dima aktualisierte Frage. – mushroom

Antwort

0

Nun, Tsv ist ein Textformat, also am Ende des Tages wird alles eine Zeichenfolge. Der einfachste Weg wäre, einfach .toString auf Ihrem Key Typ zu überschreiben, oder wickeln Sie es in ein anderes Objekt mit .toString übersteuert. Oder ersetze es als letzten Schritt einfach durch einen String (ich denke, das machst du ohnehin schon). Ich bin mir nicht sicher, was Sie meinen, wenn Sie sagen, dass es "verschwenderisch" ist. Es fügt dem Ablauf keinen zusätzlichen Schritt hinzu, wenn das Ihr Anliegen ist, und die Umwandlung in eine Zeichenfolge müsste in jedem Fall stattfinden, so dass die Kosten behoben sind.

typedPipe. 
.map(someMapper) 
.groupBy(x => beautifulString(x.nonPrimitiveField)) 
.sum 
.write(sink)