在使用Spark Scala中的org.apache.hadoop.fs软件包时遇到了一个问题。我只需要来自给定目录的必需文件详细信息(文件名,块大小,修改时间)。我尝试使用以下代码
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FileStatus, FileSystem, Path}
val fs = FileSystem.get(new Configuration())
val dir: String = "/env/domain/work/latest_ts"
val input_files = fs.listStatus(new Path(dir))
获得的input_files变量是Array [FileStatus],并具有该目录中文件的所有详细信息。在My Spark代码中,对于以List [Details]形式存在的每个文件,我只需要上述三个参数。
case class Details(name: String, size: Double, time: String)
在Array [FileStatus]中,我们将'path'(文件完整路径)作为String,将块大小作为Long,并将修改时间更改为。 我尝试将Array [FileStatus]解析为Json并取出所需的键值对,但我做不到。我还尝试了以下方法,分别创建了三个列表并将它们压缩以形成一个元组列表(String,Double,String),但它与List [Details]不匹配,并在执行时出现错误。
val names = fs.listStatus(new Path(dir)).map(_.getPath().getName).toList
val size = fs.listStatus(new Path(dir)).map(_.getBlockSize.toDouble).toList
val time = fs.listStatus(new Path(dir)).map(_.getModificationTime.toString).toList
val input_tuple = (names zip time zip size) map {case ((n,t),s) => (n,t,s)}
val input_files : List[Details] = input_tuple.asInstanceOf[List[Details]]
我得到的错误是
Exception during processing!
java.lang.ClassCastException: scala.Tuple3 cannot be cast to com.main.Details
请问有人可以从fs中获取所需的参数或如何正确转换元组吗? 请帮助,在此先谢谢
要转换Json并读取键值对,我使用mkString(“,”)将Array [FileStatus]转换为String,并尝试使用JSON.parseFull(input_string)进行解析,这引发了错误。
答案 0 :(得分:0)
这是您可以做的:
void update(ScrollMetrics metrics) {
assert(metrics != null);
_lastMetrics = metrics; // Save the metrics.
notifyListeners();
}
这将为您提供列表[详细信息]。希望这会有所帮助!