我在BigQuery中有一个表,我想查询并实现FPgrowth算法。 我想先使用数据堆集群的VM实例在pyspark shell上尝试它。
我正在寻找一种使用pyspark直接在BQ中查询表的方法。我想使用生成的查询数据来实现FPGrowth(我已经熟悉)。
答案 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,看看它是如何工作的:
答案 1 :(得分:0)
要添加到Willian Fuks答案中(没有足够的代表直接回答,对此表示歉意):
Dataproc在Big Query和PySpark之间进行集成时遇到的一个问题是,您实际上无法利用BigQueries查询功能来例如对要在Spark中使用的数据进行预过滤。
使用Willian提供的示例时,实际上发生的是将引用表上的所有数据都复制到一个临时位置,以便Spark可以访问它。
您可能要使用的一个选项-如果对您的用例有意义-在大查询中创建一个临时表,其中包含您感兴趣的数据子集(您可以在BigQuery中进行查询,然后将结果保存到一个新表)。然后,您改为链接到该表,并使用PySpark完成其余工作。