我正在尝试使用 PySpark JDBC 连接从 Google Cloud Spanner 读取数据。我的 Spark 应用程序正在 Dataproc 集群上运行。我正在使用官方的 Google Cloud Spanner JDBC 驱动程序,如此处所示。以下是 PySpark 代码片段:
project = <<PROJECT_ID>>
instance = <<INSTANCE_ID>>
databases = <<DATABASE_ID>>
spanner_connection_url = 'jdbc:cloudspanner:/projects/' + project + '/instances/' + instance + '/databases/' + databases
df = spark.read \
.format("jdbc") \
.option("url", spanner_connection_url) \
.option("driver", "com.google.cloud.spanner.jdbc.JdbcDriver") \
.option("dbtable", "test_employee") \
.load()
这通常是从 Spark 设置 JDBC 连接的标准方法,或者对于 Spanner 来说,是否需要做一些不同的事情。
我们将
gax
依赖项的范围从 test
恢复为 runtime
,并在 2.8.0 版本中修复了此问题。请随意使用 Google Cloud Spanner JDBC v2.8.0
及以后。
问题:https://github.com/googleapis/java-spanner-jdbc/issues/1034
公关:https://github.com/googleapis/java-spanner-jdbc/pull/1052
该错误似乎表明 JDBC 驱动程序无法在其依赖项之一中找到类。难道您只添加了 JDBC 驱动程序的 .jar 文件,而没有添加其任何依赖项?
或者换句话说:如何确保不仅 JDBC 驱动程序,而且它的所有依赖项都被添加到类路径中?
缺少的类来自
com.google.api:gax-grpc
https://mvnrepository.com/artifact/com.google.api/gax-grpc。我从https://search.maven.org/artifact/com.google.cloud/google-cloud-spanner-jdbc/2.7.6/jar下载并检查了
google-cloud-spanner-jdbc-2.7.6.jar
,但它似乎不包括依赖项,仅找到 Spanner JDBC 类。因此您可能需要添加缺少的依赖项。
$ jar tf google-cloud-spanner-jdbc-2.7.6.jar
...
com/google/cloud/spanner/jdbc/JdbcClob.class
com/google/cloud/spanner/jdbc/JdbcDataSource.class
com/google/cloud/spanner/jdbc/JdbcBlob$1.class
...
@Rajnil Guha 这对你有用吗?