用于pyspark的BigQuery连接器通过Hadoop输入格式示例

时间:2015-07-14 08:11:28

标签: apache-spark google-bigquery pyspark google-hadoop google-cloud-dataproc

我有一个存储在BigQuery表中的大型数据集,我想将其加载到pypark RDD中以进行ETL数据处理。

我意识到BigQuery支持Hadoop输入/输出格式

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

并且pyspark应该能够使用此接口以使用方法“newAPIHadoopRDD”创建RDD。

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

不幸的是,两端的文档似乎很少,超出了我对Hadoop / Spark / BigQuery的了解。是否有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:4)

Google现在有一个关于如何在Spark中使用BigQuery连接器的example

使用GsonBigQueryInputFormat似乎有问题,但我有一个简单的莎士比亚字计数示例工作

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)