我的目录包含多个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文件为空的错误。
答案 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部分中加入处理逻辑。
希望这会有所帮助:)