【发布时间】:2016-01-28 17:27:00
【问题描述】:
我已将 SQL 数据库和 Spark 添加到我的应用程序中,并已成功将数据导入数据库。
现在我正在尝试将这些数据加载到 Spark 中,以便使用 JDBC 进行处理。我已经通过 Spark Data 选项卡连接了数据库,并通过以下方式将其作为源导入 Spark 数据源 .数据库从“连接应用程序”选项卡中为我提供了以下 SSL 字符串
jdbc:db2://75.126.155.153:50001/SQLDB:securityMechanism=9
或更多specifically
我尝试使用 Spark 连接(用 Scala 编写)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val driver = "com.ibm.db2.jcc.DB2Driver"
Class.forName(driver)
val data = sqlContext.load("jdbc", Map( "url" -> " jdbc:db2://75.126.155.153:50001/SQLDB:securityMechanism=9", "dbtable" -> "HAWAII"))
但是,我收到以下错误
Name: java.sql.SQLException
Message: No suitable driver found for jdbc:db2://75.126.155.153:50001/SQLDB:securityMechanism=9
StackTrace: java.sql.DriverManager.getConnection(DriverManager.java:608)
java.sql.DriverManager.getConnection(DriverManager.java:199)
org.apache.spark.sql.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:118)
org.apache.spark.sql.jdbc.JDBCRelation.<init>(JDBCRelation.scala:128)
org.apache.spark.sql.jdbc.DefaultSource.createRelation(JDBCRelation.scala:113)
org.apache.spark.sql.sources.ResolvedDataSource$.apply(ddl.scala:269)
org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
org.apache.spark.sql.SQLContext.load(SQLContext.scala:1253)
$line18.$read$$iwC$$iwC$$iwC$$iwC.<init>(<console>:16)
$line18.$read$$iwC$$iwC$$iwC.<init>(<console>:21)
$line18.$read$$iwC$$iwC.<init>(<console>:23)
$line18.$read$$iwC.<init>(<console>:25)
$line18.$read.<init>(<console>:27)
$line18.$read$.<init>(<console>:31)
$line18.$read$.<clinit>(<console>)
java.lang.J9VMInternals.initializeImpl(Native Method)
java.lang.J9VMInternals.initialize(J9VMInternals.java:235)
$line18.$eval$.<init>(<console>:7)
$line18.$eval$.<clinit>(<console>)
java.lang.J9VMInternals.initializeImpl(Native Method)
java.lang.J9VMInternals.initialize(J9VMInternals.java:235)
$line18.$eval.$print(<console>)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
java.lang.reflect.Method.invoke(Method.java:620)
org.apache.spark.repl.SparkIMain$ReadEvalPrint.call(SparkIMain.scala:1065)
org.apache.spark.repl.SparkIMain$Request.loadAndRun(SparkIMain.scala:1338)
org.apache.spark.repl.SparkIMain.loadAndRunReq$1(SparkIMain.scala:840)
org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:871)
org.apache.spark.repl.SparkIMain.interpret(SparkIMain.scala:819)
com.ibm.spark.interpreter.ScalaInterpreter$$anonfun$interpretAddTask$1$$anonfun$apply$3.apply(ScalaInterpreter.scala:296)
com.ibm.spark.interpreter.ScalaInterpreter$$anonfun$interpretAddTask$1$$anonfun$apply$3.apply(ScalaInterpreter.scala:291)
com.ibm.spark.global.StreamState$.withStreams(StreamState.scala:80)
com.ibm.spark.interpreter.ScalaInterpreter$$anonfun$interpretAddTask$1.apply(ScalaInterpreter.scala:290)
com.ibm.spark.interpreter.ScalaInterpreter$$anonfun$interpretAddTask$1.apply(ScalaInterpreter.scala:290)
com.ibm.spark.utils.TaskManager$$anonfun$add$2$$anon$1.run(TaskManager.scala:123)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1157)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:627)
java.lang.Thread.run(Thread.java:801)
我已经搜索过这个错误,this 回答说我需要导入驱动程序 jar,但是我已经尝试过
%AddJar
但是它给出了同样的错误。有什么想法吗?
【问题讨论】:
-
假设您的
%addJar和驱动程序版本本身没有问题,请尝试将驱动程序名称添加到属性映射 -Map( "url" -> " ... "driver" -> driver, "dbtable" -> "HAWAII") -
我添加了驱动参数并且没有骰子。但是,我搜索了一下,发现this。不过感谢您的建议!
标签: scala jdbc apache-spark ipython-notebook ibm-cloud