postgresql - 从 Spark 连接到 Postgres 时出现 NullpointerException - 为什么?

标签 postgresql scala apache-spark

object App {
  def main(args: Array[String]) {
    val conf = new spark.SparkConf().setMaster("local[2]").setAppName("mySparkApp")
    val sc = new spark.SparkContext(conf)
    val sqlContext = new SQLContext(sc)

    val jdbcUrl = "1.2.34.567" 
    val jdbcUser = "someUser"
    val jdbcPassword = "xxxxxxxxxxxxxxxxxxxx"
    val tableName = "myTable"
    val driver = "org.postgresql.Driver"
    Class.forName(driver)

    val df = sqlContext
            .read
            .format("jdbc")
            .option("driver", driver)
            .option("url", jdbcUrl)
            .option("userName", jdbcUser)
            .option("password", jdbcPassword)
            .option("dbtable", tableName) // NullPointerException occurs here
            .load()
  }
}

我想从 Spark 连接到 LAN 上的 Postgres 数据库。运行时出现如下错误:

Exception in thread "main" java.lang.NullPointerException
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:71)
    at org.apache.spark.sql.execution.datasources.jdbc.JDBCRelation$.getSchema(JDBCRelation.scala:210)
    at org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:318)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:223)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:211)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:167)
    at <redacted>?.main(App.scala:42)
    at <redacted>.App.main(App.scala)

option("dbtable", tableName) 行出现空指针异常是否有明显的原因?我正在使用 Spark-2.3.1-bin-hadoop2.7 和 Scala 2.11.12。对于 postgres 依赖项,我使用这个版本:

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1200-jdbc41</version>
        </dependency>

最佳答案

错误消息(对故障排除没有太大帮助)可能不是针对选项dbtable,而是针对选项url

您的 jdbcUrl 似乎缺少 URL 协议(protocol) jdbc:postgresql:// 作为前缀。这是一个链接:Spark's JDBC data sources .

关于postgresql - 从 Spark 连接到 Postgres 时出现 NullpointerException - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55616608/

相关文章:

python - pyspark 在集群上,确保所有节点都被使用

java - 使用 jooq 在 postgres 中自动生成主键

python - SQLAlchemy 有 bool_and 聚合函数吗?

java - 加载到 Spark 数据集中的文件列表

java - 为什么这个 Spark 代码抛出 java.io.NotSerializableException

java - Scala类继承和方法参数

scala - 如何使用 Spark/scala 解析 YAML

database - 执行批量更新和删除操作时避免 PostgreSQL 死锁

sql - Postgresql 表相交

scala - 使用 play-slick 1.0 在 play 2.4 中创建表