9

Ho un grande set di dati archiviato in una tabella BigQuery e vorrei caricarlo in un RDD Pypark per l'elaborazione dei dati ETL.Connettore BigQuery per pyspark tramite Hadoop Esempio di formato di input

ho capito che BigQuery supporta il formato di Hadoop Input/Output

https://cloud.google.com/hadoop/writing-with-bigquery-connector

e pyspark dovrebbe essere in grado di utilizzare questa interfaccia, al fine di creare un RDD utilizzando il metodo "newAPIHadoopRDD".

http://spark.apache.org/docs/latest/api/python/pyspark.html

Purtroppo, la documentazione su entrambe le estremità sembra scarsa e va oltre la mia conoscenza di Hadoop/Spark/BigQuery. C'è qualcuno che ha capito come farlo?

risposta

3

Google ha ora un example su come utilizzare il connettore BigQuery con Spark.

Ci sembra essere un problema con il GsonBigQueryInputFormat, ma ho avuto una semplice parola di Shakespeare esempio il conteggio di lavoro

import json 
import pyspark 
sc = pyspark.SparkContext() 

hadoopConf=sc._jsc.hadoopConfiguration() 
hadoopConf.get("fs.gs.system.bucket") 

conf = {"mapred.bq.project.id": "<project_id>", "mapred.bq.gcs.bucket": "<bucket>", "mapred.bq.input.project.id": "publicdata", "mapred.bq.input.dataset.id":"samples", "mapred.bq.input.table.id": "shakespeare" } 

tableData = sc.newAPIHadoopRDD("com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat", "org.apache.hadoop.io.LongWritable", "com.google.gson.JsonObject", conf=conf).map(lambda k: json.loads(k[1])).map(lambda x: (x["word"], int(x["word_count"]))).reduceByKey(lambda x,y: x+y) 
print tableData.take(10) 
+0

Ciao, sì. In realtà avevo già capito me stesso. Comunque hanno pubblicato solo il connettore per scala. Metterò la soluzione usando pyspark come ho tempo. –