2017-11-10 2 views
0

Ich importierte Daten von BigQuery auf Pyspark mit dem folgenden Code:RDD Json Dateiverarbeitung

table_data = sc.newAPIHadoopRDD(
    'com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat', 
    'org.apache.hadoop.io.LongWritable', 
    'com.google.gson.JsonObject', 
    conf=conf) 

Der Ausgang ein RDD Rahmen ist, sondern die Daten in einem json-Format:

[(0, u'{"colA":"Value1,Value4"}'), (52, u'{"colA":"Value2"}')] 

Ich brauche um alle Werte im RDD-Format zu extrahieren. Ein Hauptanliegen der resultierenden RDD sollte keine doppelten Anführungszeichen für jeden Datensatz enthalten.

erforderlich:

Value1,Value4 
Value2 

und nicht:

"Value1,Value4" 
"Value2" 
+1

Können Sie Ihr Ergebnis in einer gültigen Python-Datenstruktur zeigen? Brauchen Sie auch eine andere RDD? – Psidom

+0

Ich brauche eine RDD, da ich MLlib verwenden würde, um einen Algorithmus zu implementieren. – Nivi

+0

Wenn der JSON durch ein "," getrennt ist, ist sein Rückgabetyp bereits "str". Wie würdest du den Typ jedes "Wertes" kennen, wie float, int, str und so weiter? –

Antwort

1

Von dem, was ich aus Ihrer Frage verstanden dies ist, was Sie suchen für:

import json 
data = sc.parallelize([(0, u'{"colA":"Value1,Value4"}'), (52, u'{"colA":"Value2"}')]) 
data = data.map(lambda x: (json.loads(x[1])['colA'])) 
print(data.collect()) 

Ergebnisse:

['Value1,Value4', 'Value2'] 
+0

Ist es möglich, dies als eine Liste von Listen zu bekommen? [['Value1, Value4'], [Value2 ']] – Nivi

+1

Sie könnten 'split' in die json return einfügen, etwas wie' json.loads (x [1]) [' colA ']. Split (', ') '. Oder wenn Sie die Werte nicht trennen wollen, sollte die Konvertierung in die Liste bereits funktionieren: '[json.loads (x [1]) ['colA']]' –

1

laden Möglicherweise es mit json Modul:

import json 

table_data.map(lambda t: json.loads(t[1]).get("colA")).collect() 
# [u'Value1,Value4', u'Value2'] 
+1

Ich werde es versuchen und Sie irgendwann wissen lassen, ob dies funktioniert, da ich derzeit nicht genügend Speicher habe. Vielen Dank für Ihre Zeit. – Nivi

+0

Es funktioniert. Vielen Dank! – Nivi

Verwandte Themen