使用dbutils在Databricks中上传后,从目录中删除文件

时间:2019-01-08 12:27:06

标签: python databricks azure-databricks

StackOverflow的一个非常聪明的人帮助我将文件从Databricks复制到目录中: copyfiles

复制链接后,我使用相同的原理删除文件:

for i in range (0, len(files)):
  file = files[i].name
  if now in file:  
    dbutils.fs.rm(files[i].path,'/mnt/adls2/demo/target/' + file)
    print ('copied     ' + file)
  else:
    print ('not copied ' + file)

但是,我遇到了错误:

TypeError:'/ mnt / adls2 / demo / target /'类型错误-预期为bool类。

有人可以让我知道如何解决此问题。我认为在最初使用命令dbutils.fs.rm

复制文件后删除文件很简单

3 个答案:

答案 0 :(得分:1)

如果要从路径'/ mnt / adls2 / demo / target /'删除所有文件

有一个简单的命令

<datacheck> <script/> <webresults> <formdata1>167917</formdata1> <formdata2>20190101</formdata2> <formdata3>10</formdata3> <results> <code>ACTIVE ( ACT19 )</code> <description> This product is verified. </description> <brandinfo> ACME Company New York New York </brandinfo> </results> </webresults>

无论如何,如果您想使用代码,请查看dbutils doc

dbutils.fs.rm('/mnt/adls2/demo/target/', True)

您的代码具有更多参数

rm(dir: String, recurse: boolean = false): boolean -> Removes a file or directory

我认为您不需要dbutils.fs.rm(files[i].path,'/mnt/adls2/demo/target/' + file)这部分

这样您的新代码就可以了

,'/mnt/adls2/demo/target/'

答案 1 :(得分:1)

如果您有大量文件,以这种方式删除它们可能需要很多时间。您可以利用火花并行来并行删除文件。我提供的答案在 Scala 中,但可以更改为 python。

您可以使用下面的这个函数检查目录是否存在:

import java.io._
def CheckPathExists(path:String): Boolean = 
{
  try
  {
    dbutils.fs.ls(path)
    return true
  }
  catch
  {
    case ioe:java.io.FileNotFoundException => return false
  }
}

您可以定义用于删除文件的函数。您正在一个对象内创建此函数,并从 Serializable 类扩展该对象,如下所示:

object Helper extends Serializable
{
def delete(directory: String): Unit = {
    dbutils.fs.ls(directory).map(_.path).toDF.foreach { filePath =>
      println(s"deleting file: $filePath")
      dbutils.fs.rm(filePath(0).toString, true)
    }
  }
}

现在您可以先检查路径是否存在,如果返回true,则您可以调用delete函数删除多个任务中文件夹内的文件。

val directoryPath = "<location"
val directoryExists = CheckPathExists(directoryPath)
if(directoryExists)
{
Helper.delete(directoryPath)
}

答案 2 :(得分:0)

为了从 dbfs 中删除文件,您可以在任何笔记本中编写此内容

%fs rm -r dbfs:/user/sample_data.parquet