我正在尝试使用pyspark连接到数据库,我使用以下代码:
sqlctx = SQLContext(sc)
df = sqlctx.load(
url = "jdbc:postgresql://[hostname]/[database]",
dbtable = "(SELECT * FROM talent LIMIT 1000) as blah",
password = "MichaelJordan",
user = "ScottyPippen",
source = "jdbc",
driver = "org.postgresql.Driver"
)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
知道为什么会这样吗?
编辑:我试图在我的计算机本地运行代码.
我之前也问过这个问题,但没有得到任何答案(无法在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 …Run Code Online (Sandbox Code Playgroud) 我已经在Windows机器上安装了Spark,并希望通过Spyder使用它.经过一些故障排除后,基础知识似乎有效:
import os
os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6"
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
spark_config = SparkConf().setMaster("local[8]")
sc = SparkContext(conf=spark_config)
sqlContext = SQLContext(sc)
textFile = sc.textFile("D:\\Analytics\\Spark\\spark-1.4.0-bin-hadoop2.6\\README.md")
textFile.count()
textFile.filter(lambda line: "Spark" in line).count()
sc.stop()
Run Code Online (Sandbox Code Playgroud)
这按预期运行.我现在想要连接到在同一服务器上运行的Postgres9.3数据库.我从这里下载JDBC驱动程序在这里,并把它放在文件夹d:\分析\星火\ spark_jars.然后我创建了一个包含以下行的新文件D:\ Analytics\Spark\spark-1.4.0-bin-hadoop2.6\conf\spark-defaults.conf:
spark.driver.extraClassPath 'D:\\Analytics\\Spark\\spark_jars\\postgresql-9.3-1103.jdbc41.jar'
Run Code Online (Sandbox Code Playgroud)
我运行了以下代码来测试连接
import os
os.environ["SPARK_HOME"] = "D:\Analytics\Spark\spark-1.4.0-bin-hadoop2.6"
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
spark_config = SparkConf().setMaster("local[8]")
sc = SparkContext(conf=spark_config)
sqlContext = SQLContext(sc)
df = (sqlContext
.load(source="jdbc",
url="jdbc:postgresql://[hostname]/[database]?user=[username]&password=[password]",
dbtable="pubs")
)
sc.stop()
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
Py4JJavaError: An error occurred while calling …Run Code Online (Sandbox Code Playgroud) 我正在尝试将数据帧写入mysql表。No suitable driver found for jdbc:mysql://dbhost当我尝试写作时,我得到了。
作为预处理的一部分,我从同一数据库中的其他表中读取数据,这样做没有问题。我可以进行完整运行并将行保存到拼花文件中,因此绝对可以从mysql DB中读取。
我正在使用以下方法提交:
spark-submit --conf spark.executor.extraClassPath=/home/user/Downloads/mysql-connector-java-5.1.35-bin.jar --driver-class-path /home/user/Downloads/mysql-connector-java-5.1.35-bin.jar --jars /home/user/Downloads/mysql-connector-java-5.1.35-bin.jar main.py
我在写:
df.write.jdbc(url="jdbc:mysql://dbhost/dbname", table="tablename", mode="append", properties={"user":"dbuser", "password": "s3cret"})