Dataproc上PySpark中的BigQuery连接器ClassNotFoundException

时间:2019-06-15 18:07:43

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

我正在尝试使用Dataproc在PySpark中运行脚本。

该脚本有点像this example和我需要做的事情之间的合并,因为我想检查一切是否正常。显然不是。

我得到的错误是:

  

文件“ /usr/lib/spark/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,第328行,位于get_return_value中   py4j.protocol.Py4JJavaError:调用z:org.apache.spark.api.python.PythonRDD.newAPIHadoopRDD时发生错误。   :java.lang.ClassNotFoundException:com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat

我确保我拥有所有的罐子,并在其他类似的帖子中建议添加一些新的罐子。我还检查了SPARK_HOME变量。

您可以在下面看到代码;尝试实例化table_data时出现错误。

"""BigQuery I/O PySpark example."""
from __future__ import absolute_import
import json
import pprint
import subprocess
import pyspark
from pyspark.sql import SQLContext

sc = pyspark.SparkContext()

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 = {
    '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_dataset = 'wordcount_dataset'
output_table = 'wordcount_output'

table_data = sc.newAPIHadoopRDD(
    'com.google.cloud.hadoop.io.bigquery.JsonTextBigQueryInputFormat',
    'org.apache.hadoop.io.LongWritable',
    'com.google.gson.JsonObject',
    conf=conf)

1 个答案:

答案 0 :(得分:2)

正如example中指出的那样,提交作业时需要包括BigQuery连接器jar。

通过Dataproc作业API:

gcloud dataproc jobs submit pyspark --cluster=${CLUSTER} \
    /path/to/your/script.py \
    --jars=gs://hadoop-lib/bigquery/bigquery-connector-hadoop2-latest.jar

spark-submit从群集内部:

spark-submit --jars=gs://hadoop-lib/bigquery/bigquery-connector-hadoop2-latest.jar \
    /path/to/your/script.py