# #apache-spark #pyspark #google-bigquery
Вопрос:
Это моя конфигурация pyspark. Я выполнил шаги, упомянутые здесь, и не создал sparkcontext.
spark = SparkSession
.builder
.appName(appName)
.config(conf=spark_conf)
.config('spark.jars.packages', 'com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.22.0')
.config('spark.jars.packages','com.google.cloud.bigdataoss:gcsio:1.5.4')
.config('spark.jars', 'gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar,spark-bigquery-with-dependencies_2.12-0.21.1.jar,spark-bigquery-latest_2.11.jar')
.config('spark.jars', 'postgresql-42.2.23.jar,bigquery-connector-hadoop2-latest.jar')
.getOrCreate()
Затем, когда я пытаюсь написать демонстрационный фрейм данных spark для bigquery
df.write.format('bigquery')
.mode(mode)
.option("credentialsFile", "creds.json")
.option('table', table)
.option("temporaryGcsBucket",bucket)
.save()
Он выдает и ошибку
File "c:sparktestvnenvlibsite-packagespy4jprotocol.py", line 326, in get_return_value
raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling o60.save.
: java.lang.ClassNotFoundException: Failed to find data source: bigquery. Please find packages at http://spark.apache.org/third-party-projects.html
Комментарии:
1. Я думаю, что вы переопределяете
spark.jars.packages
иspark.jars
настраиваете, потому что он звонит дважды. Кроме того, если эти файлы JAR находятся на GS, может потребоваться указать абсолютный путь к каждому файлу, разделенный запятой.
Ответ №1:
Моя проблема заключалась в неисправных версиях банок. Я использую spark 3.1.2 и hadoop 3.2. Это были банки maven с кодом, которые работали для меня.
spark = SparkSession
.builder
.master('local')
.appName('spark-read-from-bigquery')
.config('spark.jars.packages','com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.22.0,com.google.cloud.bigdataoss:gcs-connector:hadoop3-1.9.5,com.google.guava:guava:r05')
.config('spark.jars','guava-11.0.1.jar,gcsio-1.9.0-javadoc.jar') # you will have to download these jars manually
.getOrCreate()