scala怎么读取hdfs中的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了scala怎么读取hdfs中的文件相关的知识,希望对你有一定的参考价值。

参考技术A scala怎么读取hdfs中的文件
前面我们介绍了很多MSI文件的内容,其实MSI并不神秘、复杂,我们自己都能制作,并且制作MSI文件的工具已经在Windows的安装盘上了。

首先,找到Windows2000的安装光盘,双击下边的这个位置的文件:valueadd\3rdparty\Mgmt\Winstleadmle.msi,

很快软件就自动安装到了电脑中。在开始菜单的所有程序里边就多了“VERITAS software”组,点击运行里边的“VERITAS discover”就可以开始制作MSI文件了。本回答被提问者采纳
参考技术B 直接上代码,不谢。
import java.io.BufferedReader
import java.net.URI
import java.util.Properties

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.FSDataInputStream, FileSystem, Path

object li1943695812
def main(args: Array[String]): Unit =
// 首先命名配置文件hdfs地址
val dfsrc="hdfs://jacky:9000/conf/cs.txt"
// 加载配置文件解析对象
val properties = new Properties()
// 创建fddatastream 对象
val hdfs = FileSystem.get(URI.create(dfsrc),new Configuration())
// 打开hdfs 文件流
var fs =hdfs.open(new Path(dfsrc))
// 读取配置文件
properties.load(fs)
val aa = properties.getProperty("hh")
// 打印
println(aa)


无法从 Scala 中的资源文件夹中读取文件

【中文标题】无法从 Scala 中的资源文件夹中读取文件【英文标题】:Cannot read file from resource folder in Scala 【发布时间】:2021-12-31 12:08:57 【问题描述】:

我正在尝试读取位于我的/src/test/resources/data 文件夹中的文件“my_data.txt”。

––– src

  –– main

  –– test

   ––– resources

      ––– data

          ––– my_data.txt

我有以下代码可以做到这一点:

val filename = getClass.getResource("/src/test/resources/data/my_data.txt").getPath

当我编译它时,编译很顺利,但是,当我在鸭子中运行测试时,我收到以下错误消息:

java.lang.NullPointerException
    at (xxxx.scala:128)
    at org.scalatest.OutcomeOf.outcomeOf(OutcomeOf.scala:85)
    at org.scalatest.OutcomeOf.outcomeOf$(OutcomeOf.scala:83)
    at org.scalatest.OutcomeOf$.outcomeOf(OutcomeOf.scala:104)
    at org.scalatest.Transformer.apply(Transformer.scala:22)
    at org.scalatest.Transformer.apply(Transformer.scala:20)
    at org.scalatest.FunSpecLike$$anon$1.apply(FunSpecLike.scala:454)
    at org.scalatest.TestSuite.withFixture(TestSuite.scala:196)
    at org.scalatest.TestSuite.withFixture$(TestSuite.scala:195)
    at org.scalatest.FunSpec.withFixture(FunSpec.scala:1630)
    at org.scalatest.FunSpecLike.invokeWithFixture$1(FunSpecLike.scala:452)
    at org.scalatest.FunSpecLike.$anonfun$runTest$1(FunSpecLike.scala:464)
    at org.scalatest.SuperEngine.runTestImpl(Engine.scala:289)
    at org.scalatest.FunSpecLike.runTest(FunSpecLike.scala:464)
    at org.scalatest.FunSpecLike.runTest$(FunSpecLike.scala:446)


When I try to print the path that I am reading from I got `null` as an output.

又一次尝试

除了上面我尝试了以下代码:

    val ss = scala.io.Source.fromResource("/src/test/resources/data/my_data.txt") ClassLoader.getSystemResource("/src/test/resources/data/my_data.txt").getPath

另外,我在POM 文件中的资源中添加了src/test/resources/data

终于

正如this 提到的,我检查了编译器中是否包含.txt(我正在使用MAC

【问题讨论】:

getClass.getResource("/data/my_data.txt") 工作吗? 正如我上面提到的,它没有。 注意路径本身。我评论了从资源目录(/data/my_data.txt)开始的路径,但是在您的问题中使用了绝对路径。 这就是我的代码中的内容:val fileName = getClass.getResource("/data/my_data.txt").getFile() 【参考方案1】:

好吧,我通过使用getAbsolutePath 获取绝对路径解决了这个问题。我指出test.properties 文件有dataDir。这是我所做的:

properties.load(getClass.getClassLoader.getResourceAsStream("test.properties"))
testDataDirectory = new File(properties.getProperty("dataDir"))
val file = new File(testDataDirectory.getAbsolutePath +"/data/my_data.txt"

for (line <- Source.fromFile(file).getLines) 
   println(line)

这并不意味着这是 “最佳” 方法,但以防万一您遇到类似问题,高于我用来解决它的方法。

【讨论】:

以上是关于scala怎么读取hdfs中的文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala 从 HDFS 读取输入 xml 数据

如何从 Scala 代码中读取 HDFS 文件

scala中的hdfs文件列表

在 Spark/Scala 中写入 HDFS,读取 zip 文件

从 Java 中的 spark 转换函数写入 HDFS 中的文件

如何使用 Spark/Scala 在 HDFS 上编写/创建 zip 文件?