因此,我一直在使用 sbt 和 assembly 将所有依赖项打包到一个 jar 中以用于我的 Spark 作业。我有几份工作正在使用c3p0
设置连接池信息,将其广播出去,然后使用foreachPartition
然后在 RDD 上获取连接,并将数据插入数据库。在我的 sbt 构建脚本中,我包括
"mysql" % "mysql-connector-java" % "5.1.33"
这可确保 JDBC 连接器与作业打包在一起。一切都很好。
所以最近我开始使用 SparkSQL,并意识到使用 DataFrame 中的新功能将其保存到 jdbc 源要容易得多1.3.0
我收到以下异常:
java.sql.SQLException:找不到合适的驱动程序
jdbc:mysql://some.domain.com/myschema?user=user&password=密码位于
java.sql.DriverManager.getConnection(DriverManager.java:596) 在
java.sql.DriverManager.getConnection(DriverManager.java:233)
当我在本地运行这个时,我通过设置解决了这个问题
SPARK_CLASSPATH=/path/where/mysql-connector-is.jar
最终我想知道的是,为什么这项工作应该与驱动程序打包在一起时却无法找到驱动程序?我的其他工作从来没有遇到过这个问题。据我所知c3p0
和数据框代码都使用java.sql.DriverManager
(据我所知,它可以为您导入所有内容)所以它应该可以正常工作?如果有什么东西阻止了组装方法的工作,我需要做什么才能使其工作?
此人也有类似的问题:http://apache-spark-user-list.1001560.n3.nabble.com/How-to-use-DataFrame-with-MySQL-td22178.html
您是否已将连接器驱动程序更新到最新版本?另外,您在调用 load() 时是否指定了驱动程序类?
Map<String, String> options = new HashMap<String, String>();
options.put("url", "jdbc:mysql://localhost:3306/video_rcmd?user=root&password=123456");
options.put("dbtable", "video");
options.put("driver", "com.mysql.cj.jdbc.Driver"); //here
DataFrame jdbcDF = sqlContext.load("jdbc", options);
在spark/conf/spark-defaults.conf中,您还可以将spark.driver.extraClassPath和spark.executor.extraClassPath设置为您的MySql驱动程序.jar的路径
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)