从Scala中的HDFS返回路径
我想返回一个文件夹所在的文件路径,并在该文件夹中搜索“零件”文件从Scala中的HDFS返回路径,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我想返回一个文件夹所在的文件路径,并在该文件夹中搜索“零件”文件 def listDirectoriesGetPartFile(folderPath: String): org.apache.hadoop.fs.Path { val path = new Path(folderPath) if (fileSystem.isDirectory(path)) { val st = fileSystem.listStatus(path) for (i <- 0 until st.l
def listDirectoriesGetPartFile(folderPath: String): org.apache.hadoop.fs.Path {
val path = new Path(folderPath)
if (fileSystem.isDirectory(path)) {
val st = fileSystem.listStatus(path)
for (i <- 0 until st.length) {
if (st(i).getPath.getName.toString().trim().contains("part")) {
st(i).getPath
}
}
}
????
}
def listDirectoriesGetPartFile(folderPath:String):org.apache.hadoop.fs.Path{
val路径=新路径(folderPath)
if(fileSystem.isDirectory(path)){
val st=fileSystem.listStatus(路径)
对于(i,这里有几个选项(按照Scala习惯用法的升序排列)。如果找不到匹配的文件,我假设您希望此选项返回null
(尽管强烈不推荐):
使用可变var:
def listDirectoriesGetPartFile(folderPath: String): Path = {
val path = new Path(folderPath)
var result: Path = null // use a var with a default value
if (fileSystem.isDirectory(path)) {
val st = fileSystem.listStatus(path)
// update the value of result if we found what we're looking for
result = st.map(_.getPath).find(_.getName.trim.contains("part")).orNull
}
result // return the var
}
在Scala中使用if-else,一切都是一个表达式,因此if-else表达式可以是返回值:
def listDirectoriesGetPartFile(folderPath: String): Path = {
val path = new Path(folderPath)
if (fileSystem.isDirectory(path)) {
val st = fileSystem.listStatus(path)
st.map(_.getPath).find(_.getName.trim.contains("part")).orNull
} else {
null
}
}
更改签名以返回选项:因为此方法可能找到您要查找的路径,但可能找不到(如果给定路径不是文件夹,或者文件夹中不存在此类文件),最好是返回类型传递这种可能性-这就是可以使用Scala的选项的地方。为了方便起见,我还将用模式匹配替换if-else,但这不是必须的:
def listDirectoriesGetPartFile(folderPath: String): Option[Path] = {
new Path(folderPath) match {
case p if fileSystem.isDirectory(p) => fileSystem.listStatus(p)
.map(_.getPath)
.find(_.getName.trim.contains("part"))
case _ => None
}
}
如果isDirectory(path)
为false,或者其中没有任何文件的名称中包含“part”,那么您希望从该函数返回什么?@TzachZohar包含“part”的文件路径我知道如果有包含“part”的文件路径,那么应该返回什么,但是代码必须返回某些内容(或引发异常)如果没有这样的文件,您希望它返回什么?