【问题标题】:Error using Spark JdbcRDD to read PostgreSQL table使用 Spark JdbcRDD 读取 PostgreSQL 表时出错
【发布时间】:2017-11-19 07:16:09
【问题描述】:

我正在尝试将一张表从 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 次,最近一次失败:丢失任务 0.3 在阶段 1.0 (TID 7, 10.0.0.13, executor 1): org.postgresql.util.PSQLException:列索引超出范围: 1、列数:0。

我正在使用最新的 PostgreSQL JDBC 驱动程序,并且我已检查它是否正确地针对数据库进行身份验证。

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

【问题讨论】:

    标签: postgresql scala apache-spark jdbc rdd


    【解决方案1】:

    来自spark documentation

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

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

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

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

    【讨论】:

    • "select * from my_table offset ? limit ?"是我需要的,干杯!
    猜你喜欢
    • 2015-10-23
    • 2020-12-30
    • 2017-01-11
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2018-04-24
    • 2020-04-01
    相关资源
    最近更新 更多