使用 dbutils 在 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 复制文件后删除文件很简单

原文由 Carltonp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

如果您有大量文件,以这种方式删除它们可能会花费很多时间。您可以利用 spark parallelism 并行删除文件。我提供的答案是在 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那么你可以在多个任务中调用删除函数来删除文件夹中的文件。

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

原文由 Nikunj Kakadiya 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果要删除以下路径中的所有文件: '/mnt/adls2/demo/target/' ,有一个简单的命令:

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

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

rm(dir: String, recurse: boolean = false): boolean -> 删除文件或目录

该函数的第二个参数应为布尔值,但您的代码具有带路径的字符串:

 dbutils.fs.rm(files[i].path, '/mnt/adls2/demo/target/' + file)

所以你的新代码可以如下:

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

原文由 Fabio Schultz 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题