仅从scala的HDFS目录中获取所需的文件详细信息

时间:2018-07-09 21:51:54

标签: json scala apache-spark hdfs

在使用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)进行解析,这引发了错误。

1 个答案:

答案 0 :(得分:0)

这是您可以做的:

void update(ScrollMetrics metrics) {
  assert(metrics != null);
  _lastMetrics = metrics; // Save the metrics.
  notifyListeners();
}

这将为您提供列表[详细信息]。希望这会有所帮助!