【问题标题】:Update a mutable List within a foreach loop scala spark在 foreach 循环 scala spark 中更新可变列表
【发布时间】:2016-06-02 13:17:42
【问题描述】:

我需要使用 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 为空。

【问题讨论】:

  • 将其写入 scala 文件时会出现什么异常?
  • 例外是listOfiles为空
  • 我猜在 scala 方面没有错,也许再次检查 hdfs.globStatus ( ... ) 部分
  • 很可能你的 hdfc.globalStatus(sourcePath) 没有返回任何东西
  • 为什么在 spark-shell 中有效,而在脚本中无效?

标签: scala apache-spark


【解决方案1】:

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

试试:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2017-03-11
    • 2018-12-25
    • 2017-12-23
    相关资源
    最近更新 更多