更新foreach循环scala spark中的可变List

时间:2016-06-02 13:17:42

标签: scala apache-spark

我需要用HDFS中的目录内容更新一个可变列表,我在spark-shell中有以下代码,但是在脚本里面它并没有:

import org.apache.hadoop.fs._
import org.apache.spark.deploy.SparkHadoopUtil

var listOfFiles= scala.collection.mutable.ListBuffer[String]()

val hdfs_conf = SparkHadoopUtil.get.newConfiguration(sc.getConf)
    val hdfs = FileSystem.get(hdfs_conf)
    val sourcePath = new Path(filePath)  

 hdfs.globStatus( sourcePath ).foreach{ fileStatus =>
      val filePathName = fileStatus.getPath().toString();
      val fileName = fileStatus.getPath().getName();
      listOfFiles.append(fileName)
  } 

listOfFiles.tail

任何帮助,在运行时都会启动一个异常,告诉listOfFiles为空。

1 个答案:

答案 0 :(得分:2)

你应该避免使用可变集合。

尝试:

val listOfFiles = hdfs.globStatus(sourcePath).map{ fileStatus =>
      fileStatus.getPath().getName();
  }