Son*_*ank 10 postgresql jdbc apache-spark apache-spark-sql
我之前也问过这个问题,但没有得到任何答案(无法在pyspark shell中使用jdbc连接到postgres).
我已经在我的本地窗口上成功安装了Spark 1.3.0并运行了示例程序以使用pyspark shell进行测试.
现在,我想对存储在Postgresql中的数据运行Mllib的Correlations,但是我无法连接到postgresql.
我已成功通过运行在类路径中添加了所需的jar(测试此jar)
pyspark --jars "C:\path\to\jar\postgresql-9.2-1002.jdbc3.jar"
Run Code Online (Sandbox Code Playgroud)
我可以看到jar已成功添加到环境UI中.
当我在pyspark shell中运行以下代码时 -
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.load(source="jdbc",url="jdbc:postgresql://[host]/[dbname]", dbtable="[schema.table]")
Run Code Online (Sandbox Code Playgroud)
我得到这个错误 -
>>> df = sqlContext.load(source="jdbc",url="jdbc:postgresql://[host]/[dbname]", dbtable="[schema.table]")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\pyspark\sql\context.py", line 482, in load
df = self._ssql_ctx.load(source, joptions)
File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip\py4j\java_gateway.py", line 538, in __call__
File "C:\Users\ACERNEW3\Desktop\Spark\spark-1.3.0-bin-hadoop2.4\python\lib\py4j-0.8.2.1-src.zip\py4j\protocol.py", line 300, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o20.load.
: java.sql.SQLException: No suitable driver found for jdbc:postgresql://[host]/[dbname]
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:94)
at org.apache.spark.sql.jdbc.JDBCRelation.<init> (JDBCRelation.scala:125)
at org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:114)
at org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:290)
at org.apache.spark.sql.SQLContext.load(SQLContext.scala:679)
at org.apache.spark.sql.SQLContext.load(SQLContext.scala:667)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
at py4j.Gateway.invoke(Gateway.java:259)
at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
at py4j.commands.CallCommand.execute(CallCommand.java:79)
at py4j.GatewayConnection.run(GatewayConnection.java:207)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)
8fo*_*rty 12
我对mysql/mariadb有这个确切的问题,并从这个问题得到了大的线索
所以你的pyspark命令应该是:
pyspark --conf spark.executor.extraClassPath=<jdbc.jar> --driver-class-path <jdbc.jar> --jars <jdbc.jar> --master <master-URL>
Run Code Online (Sandbox Code Playgroud)
还要注意pyspark启动时的错误,如"警告:本地jar ...不存在,跳过".和"错误的SparkContext:罐子里找不到......",这些可能意味着你拼错了路径.
小智 0
当您使用错误版本的 JDBC 驱动程序时,似乎会引发此错误。检查https://jdbc.postgresql.org/download.html以确保您拥有正确的版本。
特别注意:
JDK 1.1 - JDBC 1。请注意,在 8.0 版本中,JDBC 1 支持已被删除,因此在更新服务器时请更新 JDK。
JDK 1.2、1.3 - JDBC 2。JDK 1.3 + J2EE - JDBC 2 EE。这包含对 javax.sql 类的附加支持。
JDK 1.4、1.5 - JDBC 3。这包含对 SSL 和 javax.sql 的支持,但不需要 J2EE,因为它已添加到 J2SE 版本中。JDK 1.6 - JDBC4。对 JDBC4 方法的支持并不完整,但大多数方法都已实现。
JDK 1.7、1.8 - JDBC41。对 JDBC4 方法的支持并不完整,但大多数方法都已实现。
归档时间: |
|
查看次数: |
14225 次 |
最近记录: |