2017-02-05 2 views
0

Ich habe den Google BigQuery Hadoop Connector verwendet und es scheint beim Versuch, die Ausgabe einer Tabelle in JSON zu speichern, der resultierende JSON Felder, die tatsächlich Zahlen (Ints oder Longs) in Zeichenfolgen konvertiert.GsonBigQueryInputFormat speichert Ints als Strings

Zum Beispiel, wenn meine Tabelle in BigQuery eine Spalte „foo“ hat vom Typ „Integer“ der Ausgang json wäre

{"foo":"1234"} 

Dies macht im Grunde jeder json Parser gelesen, dass Feld eine Zeichenfolge statt int .

ich die Datei speichere mit:

.newAPIHadoopRDD(
     hadoopConf, 
     classOf[GsonBigQueryInputFormat], 
     classOf[LongWritable], 
     classOf[JsonObject]) 

Jede Hilfe wirklich auf diese geschätzt würde, ich habe tage es fest!

Dennis da Ihr ein Beitrag über das Projekt, vielleicht können Sie

+0

Ich denke, dies liegt daran, JSON hat keinen Integer-Typ, nur Zahl Typ als Fließkomma implementiert, so würde die Übersetzung BQ Integer JSON-Nummer Genauigkeit verlieren. Die Übersetzung in eine Zeichenfolge verliert nicht die Genauigkeit, erfordert jedoch, dass die Anwendung in eine Ganzzahl zurückübersetzt wird. –

+0

Danke @MoshaPasumansky, also muss ich eine Methode implementieren, die eine generische JSON-Zeichenfolge übernimmt und sie in Integer/Double/Float übersetzt? –

+0

Ja, obwohl diese Methode nur funktioniert, wenn Ihre ganzen Zahlen klein genug sind, um in JSON-Nummer zu gehen, ohne Genauigkeit zu verlieren. –

Antwort

0

Obendrein helfen, was Mosha in den Kommentaren erwähnt in Bezug auf JSON einen Integer-Typ nicht mit, in Ihrem Fall möchten Sie wahrscheinlich die AvroBigQueryInputFormat anstatt versuchen, . Avro unterstützt die richtigen numerischen Typen. Die einzigen Änderungen wären:

Verwandte Themen