Pyspark не может найти источник данных bigquery

# #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()