首页 > 解决方案 > 无法在 IntelliJ 上使用 Scala-Spark 将参数传递给连接类

问题描述

我最近完成了对 Scala 和 Spark 的学习。我正在尝试使用 JDBC 连接从 Postgres DB 上的表中读取数据。我创建了一个 Scala SBT 项目并创建了一个属性文件来存储所有连接属性。

在此处输入图像描述

我在connections.properties 文件中有以下属性:

devHost=xx.xxx.xxx.xxx
devPort=xxxx
devDbName=base
devUserName=username
devPassword=password
gpDriverClass=org.postgresql.Driver

我创建了一个 DBManager 类,在其中初始化连接属性:

import java.io.FileInputStream
import java.util.Properties
class DBManager {
  val dbProps = new Properties()
  val connectionProperties = new Properties()
  dbProps.load(new FileInputStream(connections.properties))

  val jdbcDevHostname = dbProps.getProperty("devHost")
  val jdbcDevPort     = dbProps.getProperty("devPort")
  val jdbcDevDatabase = dbProps.getProperty("devDbName")
  val jdbcDevUrl      = s"jdbc:postgresql://${jdbcDevHostname}:${jdbcDevPort}/${jdbcDevDatabase}?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory" + s",${uname},${pwd}"

  connectionProperties.setProperty("Driver",dbProps.getProperty("gpDriverClass"))
  connectionProperties.put("user", dbProps.getProperty("devUserName"))
  connectionProperties.put("password", dbProps.getProperty("devPassword"))
}

在 Scala 对象中,我尝试使用所有这些详细信息,如下所示:

import org.apache.spark.sql.SparkSession
import com.gphive.connections.DBManager

object PartitionRetrieval {
  def main(args: Array[String]): Unit = {
    val dBManager = new DBManager();
    val spark = SparkSession.builder().enableHiveSupport().appName("GP_YEARLY_DATA").getOrCreate()
    val tabData = spark.read.jdbc(dBManager.jdbcDevUrl,"tableName",connectionProperties)

  }
}

我参考了这个链接来创建上面的代码。当我单击项目上的“构建”时:我看到我编写的代码中未正确加载connections.properties 文件。谁能让我知道如何纠正错误?


标签: scalaapache-spark

解决方案


推荐阅读