因此,我一直在使用sbt和assembly将我的所有依赖项打包到一个jar中,用于我的spark作业。我有几个工作,我使用c3p0
设置连接池信息,将其广播出去,然后在RDD上使用foreachPartition
获取连接,并将数据插入到数据库中。在我的sbt构建脚本中,我包含了
"mysql" % "mysql-connector-java" % "5.1.33"
这确保了JDBC连接器与作业打包在一起。一切都很好。
因此,最近我开始尝试使用SparkSQL,并意识到使用1.3.0
中的新特性,简单地获取数据帧并将其保存到jdbc源中要容易得多
我得到了以下异常:
在java.sql.DriverManager.getConnection(DriverManager.java:233)的java.sql.DriverManager.getConnection(DriverManager.java:596)上找不到适用于jdbc:mysql://some.domain.com/myschema?user=user&password=password的
java.sql.SQLException
当我在本地运行它时,我通过设置
SPARK_CLASSPATH=/path/where/mysql-connector-is.jar
最终,我想知道的是,为什么工作不能找到驱动程序,而它应该与它打包在一起?我的其他工作从来没有遇到过这个问题。据我所知,c3p0
和数据帧代码都使用了java.sql.DriverManager
(它可以为您导入我所能告诉您的所有内容),所以它应该工作得很好?如果有什么东西阻止了程序集方法的工作,我需要做些什么才能使它工作?
https://stackoverflow.com/questions/29552799
复制相似问题