如何在databricks文件系统中移动相同扩展名的文件?

Kri*_*ddy 10 databricks

当我尝试在 DBFS 中移动带有 * 的文件时,我遇到了文件未找到异常。这里源目录和目标目录都在 DBFS 中。我在 dbfs 目录中有名为“test_sample.csv”的源文件,我正在使用笔记本单元中的如下命令,

dbutils.fs.mv("dbfs:/usr/krishna/sample/test*.csv", "dbfs:/user/abc/Test/Test.csv")
Run Code Online (Sandbox Code Playgroud)

错误:

java.io.FileNotFoundException: dbfs:/usr/krishna/sample/test*.csv
Run Code Online (Sandbox Code Playgroud)

我很感激任何帮助。谢谢。

Hau*_*low 11

dbutils 目前不支持通配符。您可以移动整个目录:

dbutils.fs.mv("dbfs:/tmp/test", "dbfs:/tmp/test2", recurse=True)
Run Code Online (Sandbox Code Playgroud)

或者只是一个文件:

dbutils.fs.mv("dbfs:/tmp/test/test.csv", "dbfs:/tmp/test2/test2.csv")
Run Code Online (Sandbox Code Playgroud)

正如下面的评论中提到的,您可以使用 python 来实现这个通配符逻辑。另请参阅我的以下答案中的一些代码示例。


Par*_*jan 5

由于不允许使用通配符,我们需要使其以这种方式工作(列出文件,然后移动或复制 - 稍微传统的方式)

import os

def db_list_files(file_path, file_prefix):
  file_list = [file.path for file in dbutils.fs.ls(file_path) if os.path.basename(file.path).startswith(file_prefix)]
  return file_list

files = db_list_files('dbfs:/your/src_dir', 'foobar')

for file in files:
  dbutils.fs.cp(file, os.path.join('dbfs:/your/tgt_dir', os.path.basename(file)))
Run Code Online (Sandbox Code Playgroud)