2016-05-17 8 views
0

Ich beginne gerade auf Apache Flink (Scala API), mein Problem ist folgendes: Ich versuche Daten von Kafka in Apache Flink basierend auf einem Beispiel von der Flink Website zu streamen:Parsing Daten von Kafka in Apache Fink

val stream = 
    env.addSource(new FlinkKafkaConsumer09("testing", new SimpleStringSchema() , properties)) 

Alles korrekt, zeigt die stream.print() Anweisung folgende auf dem Bildschirm funktioniert:

2018-05-16 10:22:44 aM | 1 | 11 | -71,16 | 40.27

Ich möchte eine Fallklasse verwenden, um die Daten zu laden, habe ich usi versucht ng

flatMap(p=>p.split("|")) 

, aber es ist nur die Aufteilung der Daten ein Zeichen zu einem Zeitpunkt.

Grundsätzlich sind die erwarteten Ergebnisse in der Lage sein Klasse aufzufüllen 5 Felder des Falles als

field(0)=2018-05-16 10:22:44 AM 
    field(1)=1 
    field(2)=11 
    field(3)=-71.16 
    field(4)=40.27 

folgt, aber es ist jetzt gerade:

field(0) = 2 
    field(1) = 0 
    field(3) = 1 
    field(4) = 8 

etc ...

Beliebig Beratung würde sehr geschätzt werden.

Vielen Dank im Voraus

Frank

+0

Was meinen Sie mit "Teilen der Daten ein Zeichen zu einer Zeit". Vielleicht könnten Sie ein Beispiel für die erwartete Ausgabe und die tatsächliche Ausgabe geben. –

+0

Danke für Ihre Nachricht, ich habe meinen Beitrag bearbeitet. –

Antwort

2

Das Problem der Verwendung von String.split ist. Wenn Sie es mit String aufrufen, erwartet die Methode, dass es sich um einen regulären Ausdruck handelt. Daher wäre p.split("\\|") der korrekte reguläre Ausdruck für Ihre Eingabedaten. Alternativ können Sie auch die Variante split aufrufen, in der Sie das Trennzeichen p.split('|') angeben. Beide Lösungen sollten Ihnen das gewünschte Ergebnis bringen.

+0

Vielen Dank, ich schätze wirklich, dass Sie einem Neuling helfen. –