我正在尝试将一个表从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,执行人1): org.postgresql.util.PSQLException:列索引超出范围: 1,列数:0。
我正在使用最新的PostgreSQL JDBC驱动程序,我已经检查过它是否正确地验证了数据库。
为什么会发生这种情况或我可以尝试的任何其他选择?
答案 0 :(得分:2)
查询必须包含两个
?
占位符,用于分区结果的参数
和
lowerBound
第一个占位符参数的最小值;upperBound
第二个占位符的最大值
因此,您的查询应该更像
select * from my_table where ? <= id and id <= ?