首页 文章

使用Spark JdbcRDD读取PostgreSQL表时出错

提问于
浏览
1

我试图从PostgreSQL 9.6中读取一个表到RDD中的Spark 2.1.1,我在Scala中有以下代码 .

import org.apache.spark.rdd.JdbcRDD
import java.sql.DriverManager
import org.apache.spark.SparkContext

val sc = SparkContext.getOrCreate()

val rdd = new org.apache.spark.rdd.JdbcRDD(
    sc,
    () => {DriverManager.getConnection(
    "jdbc:postgresql://my_host:5432/my_db", "my_user", "my_pass")},
    sql = "select * from my_table",
    0, 100000, 2)

但是,它返回以下错误:

org.apache.spark.SparkException:作业因阶段失败而中止:阶段1.0中的任务0失败4次,最近失败:阶段1.0中失去的任务0.3(TID 7,10.0.0.13,执行者1):org.postgresql .util.PSQLException:列索引超出范围:1,列数:0 .

我正在使用最新的PostgreSQL JDBC驱动程序,我已经检查过它是否正确地验证了数据库 .

任何想法为什么会发生这种情况或任何我可以尝试的替代方案?

1 回答

  • 2

    来自spark documentation

    查询必须包含两个?用于对结果进行分区的参数的占位符

    lowerBound第一个占位符参数的最小值; upperBound第二个占位符的最大值

    所以你的查询看起来应该更像

    select * from my_table where ? <= id and id <= ?
    

相关问题