Sql 不带“?”的JDBC RDD查询语句
我将Spark与Scala结合使用,并尝试使用JdbcRDD从数据库中获取数据Sql 不带“?”的JDBC RDD查询语句,sql,scala,jdbc,apache-spark,rdd,Sql,Scala,Jdbc,Apache Spark,Rdd,我将Spark与Scala结合使用,并尝试使用JdbcRDD从数据库中获取数据 val rdd = new JdbcRDD(sparkContext, driverFactory, testQuery, rangeMinValue.get, rangeMaxValue.get, partitionCount, rowMapper) .persist(StorageLevel.MEMORY_AND_DISK) 在查询中没有?要设置的
val rdd = new JdbcRDD(sparkContext,
driverFactory,
testQuery,
rangeMinValue.get,
rangeMaxValue.get,
partitionCount,
rowMapper)
.persist(StorageLevel.MEMORY_AND_DISK)
在查询中没有?要设置的值,因为查询很长,所以我不把它放在这里。所以我有一个错误说
java.sql.SQLException:参数索引超出范围1>参数数,即0
我不知道是什么问题。有人能提出任何解决方案吗?您的问题是,您的查询字符串有两个参数?参数 从Spark用户列表: 为了让Spark并行分割JDBC查询,它需要一个 输入数据的上限和下限,以及一些 分区,以便可以将查询拆分为多个任务 例如,根据您的数据分布,您可以设置 时间戳范围的上限和下限,以及spark 能够创建新的子查询以分割数据 另一个选项是使用HadoopInputFormat加载整个表 将数据库的类设置为NewHadoopRDD 我也有同样的问题。 使用此选项:
SELECT * FROM tbl WHERE ... AND ? = ?
然后用下界1、上界1和分区1调用它。
将始终只运行一个分区。因此,对于使用单个分区处理的特定查询,如果我在JdbcRDD的构造函数中将其设置为1,则不会将其拆分,并且边界将为最小值和最大值@gasparmsI不明白,如果你想让Spark取最小值和最大值,你应该创建一个查询,比如SELECT*FROM student_info WHERE id>=?身份证