如何将 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的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Jupyter Notebook 中的 PySpark 远程连接到 Greenplum 数据库?