Scala Spark和Hadoop测试方法
我有一个从Hdfs读取文件的方法,并尝试测试这个方法 我第一次尝试HDFSMini集群,但没有成功。这种类型的方法是可测试的。如果是的话,测试它需要什么依赖关系,以及如何在不安装hadoop的情况下本地模拟Hdfs文件系统。hadoop安装应该没有依赖性。我不能要求所有想测试的人安装hadoopScala Spark和Hadoop测试方法,scala,testing,mockito,hdfs,scalatest,Scala,Testing,Mockito,Hdfs,Scalatest,我有一个从Hdfs读取文件的方法,并尝试测试这个方法 我第一次尝试HDFSMini集群,但没有成功。这种类型的方法是可测试的。如果是的话,测试它需要什么依赖关系,以及如何在不安装hadoop的情况下本地模拟Hdfs文件系统。hadoop安装应该没有依赖性。我不能要求所有想测试的人安装hadoop def readFiles(fs: FileSystem,path: Path): String = { val sb = new mutable.StringBuilder() var
def readFiles(fs: FileSystem,path: Path): String = {
val sb = new mutable.StringBuilder()
var br : BufferedReader =null
var line : String = ""
try{
if(fs.exists(path)){
if(fs.isFile(path)){
br = new BufferedReader(new InputStreamReader(fs.open(path)))
while ((line = br.readLine()) != null)
sb.append(line.trim)
} else {
throw new InvalidPathException(s"${path.toString} is a directory, please provide the full path")
}
}else {
throw new InvalidPathException(s"${path.toString} is an invalid file path ")
}
} catch {
case e: Exception => throw e
} finally {
if (br != null){
try {
br.close()
} catch {
case e: Exception => throw e
}
}
}
sb.toString
}
在处理org.apache.hadoop.fs.FileSystem时,Spark也是如此,我通常将测试数据文件存储在:
src/测试/资源
比如说
src/test/resources/test.txt
可由本地org.apache.hadoop.fs.FileSystem使用相对于项目根目录的路径(即src/test/resources/test.txt)访问:
test("Some test") {
val fileSystem = FileSystem.get(new Configuration())
val fileToRead = new Path("src/test/resources/test.txt")
val computedContent = readFiles(fileSystem, fileToRead)
val expectedContent = "todo"
assert(computedContent === expectedContent)
}
如何模仿Hdfs文件系统——聪明的人说不要模仿你不拥有的东西。你可能同意还是不同意,买一些当然要考虑的东西。只需浏览一下您的代码-您到底想测试什么?@user6910411我将从文件中读取数据,并将断言与字符串进行比较。@user6910411如果我能够模拟hdfs,我可以使用dataframe reader读取数据,并验证我是否得到以下错误。无效的路径名../resources/test.txt是无效的文件路径org.apache.hadoop.fs.InvalidPathException:无效的路径名../resources/test.txt是无效的文件路径是否使用相对于测试文件的相对路径../resources/test.txt?您能否尝试在项目结构中使用项目根的相对路径绝对路径?i、 e.src/test/resources/test.txt.我将其添加为相对路径,这是错误../resources/test.txt无效路径名../resources/test.txt是无效文件路径org.apache.hadoop.fs.InvalidPathException:无效路径名../resources/test.txt是com.rxcorp.ds.utils.CommonUtils$.readfilesconoutils.scala:124I的无效文件路径意味着您可以尝试使用src/test/resources/test.txt而不是../resources/test.txt吗?其中src位于scala项目的根文件夹中,我已经以绝对路径C:/Users/XXX/Documents/Projects/XXX/XXXX/src/test/resources/test.txt运行,但是现在我得到了java.lang.NullPointerException被抛出。java.lang.NullPointerException