我有以下代码:
val conf = new SparkConf().setAppName("Spark Test")
val sc = new SparkContext(conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val data = sqlContext.read.format("jdbc").options(
Map(
"url" -> "jdbc:sqlite:/nv/pricing/ix_tri_pi.sqlite3",
"dbtable" -> "SELECT security_id FROM ix_tri_pi")).load()
data.foreach {
row => println(row.getInt(1))
}
我尝试提交它:
spark-submit
--class "com.novus.analytics.spark.SparkTest"
--master "local[4]"
/Users/smabie/workspace/analytics/analytics-spark/target/scala-2.10/analytics-spark.jar
--conf spark.executer.extraClassPath=sqlite-jdbc-3.8.7.jar
--conf spark.driver.extraClassPath=sqlite-jdbc-3.8.7.jar
--driver-class-path sqlite-jdbc-3.8.7.jar
--jars sqlite-jdbc-3.8.7.jar
但是我得到以下异常:
Exception in thread "main" java.sql.SQLException: No suitable driver
我正在使用 Spark 版本 1.6.1,如果有帮助的话。谢谢!
尝试将 jar 定义为 spark-submit
的最后一个参数。
您是否尝试在选项中显式指定驱动程序类?
options(
Map(
"url" -> "jdbc:sqlite:/nv/pricing/ix_tri_pi.sqlite3",
"driver" -> "org.sqlite.JDBC",
"dbtable" -> "SELECT security_id FROM ix_tri_pi"))
我在尝试加载PostgreSQL表时遇到了类似的问题。
此外,可能的原因可能是在类加载中:
JDBC 驱动程序类必须对原始类装入器可见 在客户端会话和所有执行器上。这是因为Java的 类执行安全检查,导致它忽略 当一个驱动程序去时,所有驱动程序对原始类加载器不可见 以打开连接。一种方便的方法是修改 在所有工作器节点上compute_classpath.sh以包含驱动程序 JAR。
http://spark.apache.org/docs/latest/sql-programming-guide.html#troubleshooting