Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala SBT项目上加载属性文件时未找到文件异常_Scala_Apache Spark_Sbt - Fatal编程技术网

在Scala SBT项目上加载属性文件时未找到文件异常

在Scala SBT项目上加载属性文件时未找到文件异常,scala,apache-spark,sbt,Scala,Apache Spark,Sbt,我正在尝试学习IntelliJ IDEA上的Scala Spark JDBC程序。为此,我创建了一个Scala SBT项目,项目结构如下: 在类中编写JDBC连接参数之前,我首先尝试加载一个包含所有连接属性的属性文件,并尝试显示它们是否正确加载,如下所示: Caused by: java.io.FileNotFoundException: connection.properties (No such file or directory) connection.properties内容: de

我正在尝试学习IntelliJ IDEA上的Scala Spark JDBC程序。为此,我创建了一个Scala SBT项目,项目结构如下:

在类中编写JDBC连接参数之前,我首先尝试加载一个包含所有连接属性的属性文件,并尝试显示它们是否正确加载,如下所示:

Caused by: java.io.FileNotFoundException: connection.properties (No such file or directory)
connection.properties内容:

devUserName=username
devPassword=password
gpDriverClass=org.postgresql.Driver
gpDevUrl=jdbc:url
代码:

build.sbt的内容:

name := "YearPartition"

version := "0.1"

scalaVersion := "2.11.8"

libraryDependencies ++=  {
  val sparkCoreVer = "2.2.0"
  val sparkSqlVer = "2.2.0"
  Seq(
    "org.apache.spark" %% "spark-core" % sparkCoreVer % "provided" withSources(),
    "org.apache.spark" %% "spark-sql" % sparkSqlVer % "provided"  withSources(),
    "org.json4s" %% "json4s-jackson" % "3.2.11" % "provided",
    "org.apache.httpcomponents" % "httpclient" % "4.5.3"
  )
}
由于我没有将数据写入或保存到任何文件中,也没有尝试显示属性文件的值,因此我使用以下代码执行代码:

SPARK_MAJOR_VERSION=2 spark-submit --class com.yearpartition.obj.PartitionRetrieval yearpartition_2.11-0.1.jar
但我收到文件未找到异常,如下所示:

Caused by: java.io.FileNotFoundException: connection.properties (No such file or directory)

我试图修好它,但徒劳。有人能告诉我我在这里犯了什么错误以及如何纠正吗?

您必须写入connection.properties文件的完整路径(file:///full_path/connection.properties)在该选项中,当您在群集中提交作业时,如果要从本地磁盘读取文件,则必须将群集中所有服务器上的connection.properties文件保存到同一路径。但在另一个选项中,您可以从HDFS读取文件。下面是一个在HDFS上读取文件的小示例:

@throws[IOException]
def readFileFromHdfs(file: String): org.apache.hadoop.fs.FSDataInputStream = {
    val conf = new org.apache.hadoop.conf.Configuration
    conf.set("fs.default.name", "HDFS_HOST")
    val fileSystem = org.apache.hadoop.fs.FileSystem.get(conf)
    val path = new org.apache.hadoop.fs.Path(file)
    if (!fileSystem.exists(path)) {
      println("File (" + path + ") does not exists.")
      null
    } else {
      val in = fileSystem.open(path)
      in
    }
}

因此,我应该在本地或HDFS上创建一个文件,然后在“path”中给出完整路径,例如:val path=new org.apache.hadoop.fs.path(“file:///home/hmuser/connections/connection.properties"). 我说的对吗?没有。如果您想在本地系统上读取文件,只需修复代码:properties.load(newfileinputstream()file:///home/hmuser/connections/connection.properties)好的。理解。如果文件在HDFS上,我应该按照代码的说明给出HDFS上文件的路径。如果在本地,则另一种方式。@Sidhartha我的示例方法可用于读取hdfs上的文件。您的文件在本地磁盘上,不需要使用此方法。必须将代码中FileInputStream的参数更改为file:///full_path/connection.propertiesIt 可以工作,但我们不应该使用:file://,而是只需给出完整路径即可工作。