Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不带“?”的JDBC RDD查询语句_Sql_Scala_Jdbc_Apache Spark_Rdd - Fatal编程技术网

Sql 不带“?”的JDBC RDD查询语句

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) 在查询中没有?要设置的

我将Spark与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


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

您的问题是,您的查询字符串有两个参数?参数

从Spark用户列表:

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

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

另一个选项是使用HadoopInputFormat加载整个表 将数据库的类设置为NewHadoopRDD

我也有同样的问题。 使用此选项:

SELECT * FROM tbl WHERE ... AND ? = ?
然后用下界1、上界1和分区1调用它。
将始终只运行一个分区。

因此,对于使用单个分区处理的特定查询,如果我在JdbcRDD的构造函数中将其设置为1,则不会将其拆分,并且边界将为最小值和最大值@gasparmsI不明白,如果你想让Spark取最小值和最大值,你应该创建一个查询,比如SELECT*FROM student_info WHERE id>=?身份证