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
答案 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