2016-05-13 16 views
1

zu schaffen würde Ich mag diese in Scala tun:ohne Klassen in Scala

Ich habe ein Messaging-System, in dem Kafka ist der Einstiegspunkt. Die Daten kommen im binären Thrift an, das zum Kafka kodiert wird. Von dort sammle ich es mit einem Spark Job. Dort möchte ich die Nachrichten in JSON Strings deserialisieren. Nun, soweit ich es verstanden habe, konnte ich per Thrift Scala-Klassen erzeugen, aus meinen Nachrichten Scala-Objekte machen und sie dann in JSON konvertieren. Da es mir wirklich egal ist, mit den Klassen zu arbeiten, gibt es eine Möglichkeit, die binär codierten Daten direkt in JSON zu transformieren, indem Sie die Thrift-Dateien bereitstellen? Oder vielleicht erstellen Sie die Klassen zur Laufzeit? Der Punkt ist, dass ich das System dynamisch für neue Nachrichtentypen behalten möchte und somit vermeiden möchte, dass manuell erstellte Scala-Klassen in der Vorhand verwendet werden.

Ich hoffe, dass diese Art von macht Sinn, wenn Sie weitere Fragen haben, gehen Sie voran :)

Antwort

1

Thrift nicht wirklich für die dynamische Nutzung wie dies vorgesehen ist. Betrachten wir z.B. Avro stattdessen.

Wenn Sie dies mit Thrift zu tun haben, können Sie „nur“ ausführen, um die Thrift Java oder Scala-Compiler als externen Prozess, kompilieren die generierten Dateien (und Ihren eigenen erzeugten Glue Code falls vorhanden) (How do I programmatically compile and instantiate a Java class? oder Scala - How to compile code from an external file at runtime? sehen bzw. oder einfach Google für weitere Links), laden Sie die Klassen mit einem URLClassLoader und greifen Sie über Reflektion darauf zu.