如何将 PySpark 连接到 Bigquery

Posted

技术标签:

【中文标题】如何将 PySpark 连接到 Bigquery【英文标题】:How to connect PySpark to Bigquery 【发布时间】:2019-09-30 21:01:40 【问题描述】:

我正在尝试使用 PySpark 从 BigQuery 中读取表格。

我已经尝试了以下

table = 'my-project-id.project-dataset.test_table_spark'
df = spark.read.format('bigquery').option('table', table).load()

但是,我收到了这个错误

: java.lang.ClassNotFoundException: Failed to find data source: bigquery. Please find packages at http://spark.apache.org/third-party-projects.html

如何从 pySpark 读取 bigQuery 表(目前我正在使用 python2)

【问题讨论】:

【参考方案1】:

您需要将 spark-bigquery-connector 的 jar 包含在您的 spark-submit 中。最简单的方法是使用 --jars 标志来包含公开可用的最新版本的连接器:

spark-submit --jars gs://spark-lib/bigquery/spark-bigquery-latest.jar my_job.py

虽然示例引用了 Cloud Dataproc,但在提交到任何 Spark 集群时应该可以使用。

【讨论】:

有没有办法从笔记本上测试它?我正在使用 jupyter 作为 Web 界面(或通过 SSH 进行测试),我不知道在这种情况下如何使用 --jars 标志 你可以在创建 SparkSession 时试试这个:spark = SparkSession.builder.appName('my_app).config('spark.jars', 'gs://spark-lib/bigquery/spark-bigquery-latest.jar').getOrCreate() 尝试重新启动您的 Jupyter 笔记本。如果您有任何预先存在的 SparkSession,这将不起作用。另外,请确保您使用的是 Python Jupyter 内核,而不是 PySpark Jupyter 内核,根据:github.com/GoogleCloudPlatform/spark-bigquery-connector/blob/… 您发布的最后一个解决方案有效,我可以使用 pyspark 从 BQ 读取。但是,似乎我不能使用其他包(例如图框)。它再也找不到类 GraphFramePythonAPI。我怀疑这是因为我现在正在从 python 笔记本运行它.. 您也可以手动将包添加到配置中。试试这个:conf = pyspark.SparkConf().setAll([('spark.jars', 'gs://spark-lib/bigquery/spark-bigquery-latest.jar'), ('spark.jars.packages', 'graphframes:graphframes:0.7.0-spark2.4-s_2.11']) 只需确保用您使用来自spark-packages.org/package/graphframes/graphframes 的pyspark.__version__ 找到的 spark 版本的适当包替换 graphframes。然后,spark = SparkSession.builder.appName('my_app').config(conf=conf).getOrCreate()

以上是关于如何将 PySpark 连接到 Bigquery的主要内容,如果未能解决你的问题,请参考以下文章

在 pyspark 中,如何将字符串添加/连接到列?

如何从 Jupyter Notebook 中的 PySpark 远程连接到 Greenplum 数据库?

从 Docker 容器将 PySpark 连接到 Kafka

如何在 PySpark 中连接到 Presto JDBC?

将pyspark列连接到pyspark DataFrame

如何在pyspark中连接到黑斑羚?