所以我一直在使用sbt with assembly将我的所有依赖项打包成一个jar用于我的spark作业.我有几个工作,我c3p0用来设置连接池信息,广播出来,然后foreachPartition在RDD上使用然后获取连接,并将数据插入数据库.在我的sbt构建脚本中,我包含了
"mysql" % "mysql-connector-java" % "5.1.33"
Run Code Online (Sandbox Code Playgroud)
这可确保JDBC连接器与作业打包在一起.一切都很好.
所以最近我开始玩SparkSQL,并意识到简单地采用数据帧并将其保存到具有新功能的jdbc源更容易 1.3.0
我收到以下异常:
java.sql.SQLException:在java.sql中找不到合适的jdbc驱动程序:mysql://some.domain.com/myschema?user = user&password = password at java.sql.DriverManager.getConnection(DriverManager.java:596).的DriverManager.getConnection(DriverManager.java:233)
当我在本地运行时,我通过设置绕过它
SPARK_CLASSPATH=/path/where/mysql-connector-is.jar
Run Code Online (Sandbox Code Playgroud)
最终我想知道的是,为什么这个工作不应该找到驱动程序什么时候应该打包它呢?我的其他工作从未遇到过这个问题.从我可以告诉他们c3p0和数据帧代码都使用java.sql.DriverManager(它处理从我可以告诉你的一切导入所有)所以它应该工作得很好?如果有什么东西阻止汇编方法工作,我需要做些什么来使其工作?
我正在尝试使用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)
我收到以下错误:
知道为什么会这样吗?
编辑:我试图在我的计算机本地运行代码.