我正在使用Spark with Scala并尝试使用JdbcRDD从数据库中获取数据。
val rdd = new JdbcRDD(sparkContext,
driverFactory,
testQuery,
rangeMinValue.get,
rangeMaxValue.get,
partitionCount,
rowMapper)
.persist(StorageLevel.MEMORY_AND_DISK)
在查询中没有?要设置的值(因为查询很长,我没有把它放在这里。)所以我得到一个错误说,
java.sql.SQLException:参数索引超出范围(1>参数个数,为0)。
我不知道问题是什么。有人可以提出任何解决方案吗?
答案 0 :(得分:3)
遇到同样的问题。 使用它:
SELECT * FROM tbl WHERE ... AND ? = ?
然后用下限1,上限1和分区1调用它。 将始终只运行一个分区。
答案 1 :(得分:1)
您的问题是Spark期望您的查询字符串有几个?参数。
来自Spark用户列表:
为了让Spark能够并行拆分JDBC查询,它需要一个 输入数据的上限和下限,以及一些 分区,以便它可以跨多个任务拆分查询。
例如,根据您的数据分布,您可以设置 时间戳范围的上限和下限,以及spark应该是 能够创建新的子查询来分割数据。
另一种选择是使用HadoopInputFormat加载整个表 您的数据库的类作为NewHadoopRDD。