【发布时间】:2016-03-31 22:16:05
【问题描述】:
我正在使用 Spark 迈出第一步,目前正在研究通过 JDBC 驱动程序从数据库中导入一些数据的方法。 我的计划是我准备从 数据库供其他团队使用纯 SparkSQL 命令稍后使用。 这样他们就可以专注于数据,不再接触代码。
我与数据库的连接正常,到目前为止我发现了两种获取数据的工作方式。
方式一:
sqlContext.read.jdbc(url,"tab3",myProp).registerTempTable("tab3")
方式2:
case class RowClass_TEST (COL1:String, COL2:String)
val myRDD_TEST= new JdbcRDD(sc,() => DriverManager.getConnection(url,username,pw), "select * from TEST where ? < ?", 0,1,1,row => RowClass_TEST(row.getString("COL1"),row.getString("COL2")) myRDD_TEST.toDF().registerTempTable("TEST")
但是这两种方式都有一些不好的影响,
如果您必须准备更多以后不使用的表,方法 1 不会那么快。
(我在示例执行期间跟踪了 5 个 jdbc 突击队(创建连接、登录、设置、查询标头、终止连接))
方式 2 运行速度非常快,但来自 Scala 的 case class 有很大的限制。
此类类只能设置 22 个值。
那么有没有一个简单的解决方案来设置没有case class 的方式 2?
我想访问一些超过 22 列的数据库表。
我已经尝试让它工作,但我的 Scala 专业知识还不够好。
【问题讨论】:
-
这种类只能设置 22 个值 - 很长一段时间都不是这样。
-
啊,听起来不错。我正在使用 Zeppelin Web GUI 作为测试的前端,并从我的大
case class收到一条错误消息(只是一个数字)。更新的 Scala 版本是否移除了边框? -
2.11 - issues.scala-lang.org/browse/SI-7296。但是仍然存在大约 22 个限制。
-
更新:它是....版本 2.11.1 于 2014 年 5 月发布
-
link ==> Spark 还不支持 Scala 2.11 的 JDBC 组件。
标签: scala apache-spark