Java Can';t从Spark访问sqlite数据库

Java Can';t从Spark访问sqlite数据库,java,scala,apache-spark,spark-dataframe,Java,Scala,Apache Spark,Spark Dataframe,我有以下代码: 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/i

我有以下代码:

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版。
谢谢

您是否尝试在选项中明确指定驱动程序类

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的 DriverManager类执行导致忽略的安全检查 当原始类装入器运行时,所有驱动程序都不可见 打开一个连接。一种方便的方法是修改 在所有工作节点上计算_classpath.sh以包括驱动程序jar


尝试将您的jar定义为
spark submit

的最后一个参数是
/nv/pricing/ix_tri_pi.sqlite3
数据库的绝对路径吗?还可以尝试将您的jar定义为
spark submit
的最后一个参数。我真不敢相信这会奏效。非常感谢。为什么
spark\u submit
不知道命令行参数的顺序?坦率地说,这让我觉得非常可笑……”“为什么spark_submit对命令行参数的顺序不持不可知论呢?”这就是:选项优先,后面不是选项的参数。特别是,这允许使用
--
分隔操作数。@sturm我将我的问题作为答案发布,以便您可以接受。