【发布时间】:2016-12-09 15:52:07
【问题描述】:
我想使用具有不同项目 ID 的 Google Dataproc 运行一些 pyspark 作业,但到目前为止没有成功。我是 pyspark 和 Google Cloud 的新手,但我遵循 this 示例并且运行良好(如果 BigQuery 数据集是公共的或属于我的 GCP 项目,即 ProjectA)。输入参数如下所示:
bucket = sc._jsc.hadoopConfiguration().get('fs.gs.system.bucket')
projectA = 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': projectA,
'mapred.bq.gcs.bucket': bucket,
'mapred.bq.temp.gcs.path': input_directory,
'mapred.bq.input.project.id': 'projectA',
'mapred.bq.input.dataset.id': 'my_dataset',
'mapred.bq.input.table.id': 'my_table',
}
# 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)
但我需要的是从 ProjectB 的 BQ 数据集运行作业(我有查询它的凭据),因此在设置输入参数时,如下所示:
conf = {
# Input Parameters
'mapred.bq.project.id': projectA,
'mapred.bq.gcs.bucket': bucket,
'mapred.bq.temp.gcs.path': input_directory,
'mapred.bq.input.project.id': 'projectB',
'mapred.bq.input.dataset.id': 'the_datasetB',
'mapred.bq.input.table.id': 'the_tableB',
}
并尝试从 BQ 加载数据,我的脚本一直在无限运行。我应该如何正确设置它?
仅供参考,在运行我之前提到的example 之后,我可以看到在 Google Storage 中创建了 2 个地毯(shard-0 和 shard-1)并包含相应的 BQ 数据,但我的工作只有 shard-0已创建,但它是空的。
【问题讨论】:
标签: pyspark google-bigquery google-cloud-storage google-cloud-dataproc