【问题标题】:JDBC RDD Query Statement without '?'没有“?”的 JDBC RDD 查询语句
【发布时间】:2015-02-11 09:25:57
【问题描述】:

我正在使用带有 Scala 的 Spark,并尝试使用 JdbcRDD 从数据库中获取数据。

val rdd = new JdbcRDD(sparkContext,
    driverFactory,
    testQuery,
    rangeMinValue.get,
    rangeMaxValue.get,
    partitionCount,
    rowMapper)
    .persist(StorageLevel.MEMORY_AND_DISK)    

在查询中没有 ?要设置的值(因为查询很长,所以我没有把它放在这里。)所以我收到一条错误消息,

java.sql.SQLException:参数索引超出范围(1>参数个数,即0)。

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

【问题讨论】:

    标签: sql scala jdbc apache-spark rdd


    【解决方案1】:

    遇到了同样的问题。 用过这个:

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

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

    【讨论】:

      【解决方案2】:

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

      来自 Spark 用户列表:

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

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

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

      【讨论】:

      • 因此,如果我在 JdbcRDD 的构造函数中将其设置为一个,那么对于要使用单个分区处理的特定查询,它不会拆分它并且边界将是最小值和最大值? @gasparms
      • 我不明白,如果你想让 Spark 获取最小值和最大值,你应该创建一个类似“SELECT * FROM student_info WHERE id >= ? AND id
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-29
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多