当我尝试在 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 来实现这个通配符逻辑。另请参阅我的以下答案中的一些代码示例。
由于不允许使用通配符,我们需要使其以这种方式工作(列出文件,然后移动或复制 - 稍微传统的方式)
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)
| 归档时间: |
|
| 查看次数: |
11888 次 |
| 最近记录: |