Spark 与 Google Cloud Spanner 的 JDBC 连接失败

问题描述 投票:0回答:4

我正在尝试使用 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 作业失败并出现以下错误:

这通常是从 Spark 设置 JDBC 连接的标准方法,或者对于 Spanner 来说,是否需要做一些不同的事情。

apache-spark google-cloud-platform jdbc google-cloud-dataproc google-cloud-spanner
4个回答
2
投票

我们将

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


1
投票

该错误似乎表明 JDBC 驱动程序无法在其依赖项之一中找到类。难道您只添加了 JDBC 驱动程序的 .jar 文件,而没有添加其任何依赖项?

或者换句话说:如何确保不仅 JDBC 驱动程序,而且它的所有依赖项都被添加到类路径中?


0
投票

缺少的类来自

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
...

-1
投票

@Rajnil Guha 这对你有用吗?

© www.soinside.com 2019 - 2024. All rights reserved.