You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计HDFS目录下的文件数量?Scala代码报错求助

问题分析与解决方案

代码中的核心问题

  • 未定义status变量:你引用了status但从未将globStatus的查询结果赋值给它
  • 类型不匹配:fs.globStatus()返回的是Array[FileStatus]数组,不是迭代器,无法用hasNext()/next()方法遍历
  • 语法错误:if语句结构不完整,存在多余的闭合大括号,导致代码编译失败

修正后的代码

val hdfspath = "/data/fnl-ecomm/release/*/*/*/schema/*.json"
import org.apache.hadoop.fs.{FileSystem, Path, FileStatus}

// 获取HDFS文件系统实例
val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)

// 获取匹配的文件状态,过滤出实际文件(排除目录)
val fileStatuses: Array[FileStatus] = fs.globStatus(new Path(hdfspath))
  .filter(_ != null) // 防御性处理,避免空元素
  .filter(_.isFile)

// 打印所有匹配的文件路径
fileStatuses.map(_.getPath).foreach(println)

// 统计并输出文件数量
val count = fileStatuses.length
if (count > 0) {
  println(s"Count is $count")
} else {
  println("count is zero")
}

关键修正说明

  • 用fileStatuses变量接收globStatus的结果,解决未定义变量的问题
  • 直接使用数组的length属性统计文件数量,替代低效的手动循环,更符合Scala的写法
  • 修复了if-else的语法结构,确保代码块正确包裹
  • 添加防御性过滤filter(_ != null),避免globStatus返回null元素引发异常
  • 使用Scala字符串插值输出统计结果,格式更清晰规范

内容的提问来源于stack exchange,提问作者pavan hudekar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 05:30:44