检查csv文件是否为空,如果为空则抛出错误

时间:2019-08-04 16:52:20

标签: scala file dataframe apache-spark

我的目录包含多个csv文件,如下所示:

x1.csv
x2.csv
x3.csv
x4.csv

我正在使用以下命令读取数据框中的所有csv文件:

def getCSVData(path: String): Either[Throwable, DataFrame] = {
    try{
       Right(sc.read.format("csv")
      .option("delimiter",",")
      .schema(MSchema)
      .option("header","true")
      .option("dateFormat", "yyyy-MM-dd")
      .load(path)
       )
    }catch {
      case e: ControlThrowable => throw e
      case e: Throwable => {
        log.error("getCSVData failed", e)
        Left(e)
      }
    }
  }

但是,我不确定在其中包括空文件检查,如果特定文件为空,则会引发错误。

例如,如果x3文件为空并且x1,x2和x4包含数据,则应该引发x3文件为空的错误。

1 个答案:

答案 0 :(得分:1)

您可以使用FileSystem列出目录中的文件,并过滤掉没有记录的文件。

val dataPath = "<your directory location>"

val filesystem = FileSystem.get(new Configuration())

val fileStatus = filesystem.listStatus(new Path(dataPath))

fileStatus.foreach{
   x => x.getLen match {
     case 0 => println("Found Empty File :"+x.getPath.getName)
     case _ => println("Found NON Empty File :"+x.getPath.getName)
  }
}

您可以在foreach部分中加入处理逻辑。

希望这会有所帮助:)

相关问题