没有'?'的JDBC RDD查询语句

时间:2015-02-11 09:25:57

标签: sql scala jdbc apache-spark rdd

我正在使用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)。

我不知道问题是什么。有人可以提出任何解决方案吗?

2 个答案:

答案 0 :(得分:3)

遇到同样的问题。 使用它:

SELECT * FROM tbl WHERE ... AND ? = ?

然后用下限1,上限1和分区1调用它。 将始终只运行一个分区。

答案 1 :(得分:1)

您的问题是Spark期望您的查询字符串有几个?参数。

来自Spark用户列表:

  

为了让Spark能够并行拆分JDBC查询,它需要一个   输入数据的上限和下限,以及一些   分区,以便它可以跨多个任务拆分查询。

     

例如,根据您的数据分布,您可以设置   时间戳范围的上限和下限,以及spark应该是   能够创建新的子查询来分割数据。

     

另一种选择是使用HadoopInputFormat加载整个表   您的数据库的类作为NewHadoopRDD。