使用JDBC数据源时如何将用户名和密码传递给Spark-SQL?

mir*_*a67 4 jdbc h2 apache-spark apache-spark-sql

我刚开始使用 Spark-SQL 从 H2 数据库加载数据,这是我按照 Spark-SQL 文档所做的:

>>> sqlContext = SQLContext(sc)
>>> df = sqlContext.load(source="jdbc",driver="org.h2.Driver", url="jdbc:h2:~/test", dbtable="RAWVECTOR")
Run Code Online (Sandbox Code Playgroud)

但它不起作用并出现错误,我认为问题在于函数中未指定用户名和密码。

这是来自 Spark-SQL 1.3.1 文档的参数:

  1. url

    要连接到的 JDBC URL。

  2. dbtable 应该读取的 JDBC 表。请注意,FROM可以使用在 SQL 查询子句中有效的任何内容。例如,您还可以使用括号中的子查询来代替完整的表。

  3. driver 连接到此 URL 所需的 JDBC 驱动程序的类名。此类在运行 JDBC 命令之前加载到 master 和 worker 上,以允许驱动程序向 JDBC 子系统注册自己。

  4. partitionColumn, lowerBound, upperBound,numPartitions

    如果指定了其中任何选项,则必须全部指定这些选项。他们描述了从多个工作人员并行读取时如何对表进行分区。partitionColumn 必须是相关表中的数字列。

但是我没有找到任何线索如何将数据库用户名和密码传递给 sqlContext.load 函数。有谁有类似的案例或线索吗?

谢谢。

mir*_*a67 5

我想到了。做就是了

df = sqlContext.load(
  source="jdbc",driver="org.h2.Driver",
  url="jdbc:h2:tcp://localhost/~/test?user=sa&password=1234",
  dbtable="RAWVECTOR"
)
Run Code Online (Sandbox Code Playgroud)

当你创建数据库时,使用相同的模式:

conn = DriverManager.getConnection(
  "jdbc:h2:tcp://localhost/~/"+dbName+"?user=sa&password=1234", null, null
);
Run Code Online (Sandbox Code Playgroud)

而且,这里有一篇关于如何使用 API的博客