Dataproc中的BigQuery和Pyspark

时间:2017-11-09 00:58:53

标签: pyspark google-bigquery google-cloud-dataproc

我在BigQuery中有一个表,我想查询并实现FPgrowth算法。 我想先使用数据堆集群的VM实例在pyspark shell上尝试它。

我正在寻找一种使用pyspark直接在BQ中查询表的方法。我想使用生成的查询数据来实现FPGrowth(我已经熟悉)。

2 个答案:

答案 0 :(得分:3)

正如您在docs中看到的那样,Dataproc已经拥有了可用于查询BigQuery的必要连接器。

来自文档的代码示例:

import pyspark
from pyspark.sql import SQLContext

sc = pyspark.SparkContext()

# Use the Google Cloud Storage bucket for temporary BigQuery export data used
# by the InputFormat. This assumes the Google Cloud Storage connector for
# Hadoop is configured.
bucket = sc._jsc.hadoopConfiguration().get('fs.gs.system.bucket')
project = sc._jsc.hadoopConfiguration().get('fs.gs.project.id')
input_directory = 'gs://{}/hadoop/tmp/bigquery/pyspark_input'.format(bucket)

conf = {
    # Input Parameters.
    'mapred.bq.project.id': project,
    'mapred.bq.gcs.bucket': bucket,
    'mapred.bq.temp.gcs.path': input_directory,
    'mapred.bq.input.project.id': 'publicdata',
    'mapred.bq.input.dataset.id': 'samples',
    'mapred.bq.input.table.id': 'shakespeare',
}

# Output Parameters.
output_dataset = 'wordcount_dataset'
output_table = 'wordcount_output'

# Load data in from BigQuery.
table_data = sc.newAPIHadoopRDD(
    'com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat',
    'org.apache.hadoop.io.LongWritable',
    'com.google.gson.JsonObject',
    conf=conf)

我还建议您创建一个安装了Jupyter service的Dataproc群集。这将使您可以即时测试如何实现FPgrowth或您最终想要尝试的任何其他想法。

事实上,在写这个答案之前,我只是用我当前的jupyter笔记本来查询BQ,看看它是如何工作的:

enter image description here

答案 1 :(得分:0)

要添加到Willian Fuks答案中(没有足够的代表直接回答,对此表示歉意):

Dataproc在Big Query和PySpark之间进行集成时遇到的一个问题是,您实际上无法利用BigQueries查询功能来例如对要在Spark中使用的数据进行预过滤。

使用Willian提供的示例时,实际上发生的是将引用表上的所有数据都复制到一个临时位置,以便Spark可以访问它。

您可能要使用的一个选项-如果对您的用例有意义-在大查询中创建一个临时表,其中包含您感兴趣的数据子集(您可以在BigQuery中进行查询,然后将结果保存到一个新表)。然后,您改为链接到该表,并使用PySpark完成其余工作。