如何在DataRicks上将文件从一个文件夹移动到另一个文件夹

2024-04-29 01:43:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用databricks python笔记本将文件从一个文件夹移动到另一个文件夹。 我的来源是azure DataLake gen 1

假设我的文件存在adl://testdatalakegen12021.azuredatalakestore.net/source/test.csv 我正试图将文件从adl://testdatalakegen12021.azuredatalakestore.net/demo/test.csv 到adl://testdatalakegen12021.azuredatalakestore.net/destination/movedtest.csv

我尝试了各种逻辑,但没有一个代码工作正常

# Move a file by renaming it's path
import os
import shutil
os.rename('adl://testdatalakegen12021.azuredatalakestore.net/demo/test.csv', 'adl://testdatalakegen12021.azuredatalakestore.net/demo/renamedtest.csv')

# Move a file from the directory d1 to d2
shutil.move('adl://testdatalakegen12021.azuredatalakestore.net/demo/test.csv', 'adl://testdatalakegen12021.azuredatalakestore.net/destination/renamedtest.csv')

请让我知道我是否使用了正确的逻辑,因为我是在databricks上执行此操作的,而不是在本地执行此操作


Tags: 文件csvtestimport文件夹movenetdemo
3条回答

要在databricks笔记本中移动文件,可以使用dbutils如下所示:

dbutils.fs.mv('adl://testdatalakegen12021.azuredatalakestore.net/demo/test.csv', 'adl://testdatalakegen12021.azuredatalakestore.net/destination/renamedtest.csv')

以下是在DataRicks上将文件从一个文件夹移动到另一个文件夹的步骤:

将Azure Data Lake存储Gen1装载到databricks工作区:

configs = {"<prefix>.oauth2.access.token.provider.type": "ClientCredential",
           "<prefix>.oauth2.client.id": "<application-id>",
           "<prefix>.oauth2.credential": dbutils.secrets.get(scope = "<scope-name>", key = "<key-name-for-service-credential>"),
           "<prefix>.oauth2.refresh.url": "https://login.microsoftonline.com/<directory-id>/oauth2/token"}

# Optionally, you can add <directory-name> to the source URI of your mount point.
dbutils.fs.mount(
  source = "adl://<storage-resource>.azuredatalakestore.net/<directory-name>",
  mount_point = "/mnt/<mount-name>",
  extra_configs = configs)

enter image description here

参考:Mount Azure Data Lake Storage Gen1 resource using a service principal and OAuth 2.0

使用%fs命令移动文件

%fs mv dbfs:/mnt/adlsgen1/test/mapreduce.txt dbfs:/mnt/adlsgen1/test1/mapreduce.txt

enter image description here

使用dbutils命令移动文件:

dbutils.fs.mv('dbfs:/mnt/adlsgen1/test/data.csv', 'dbfs:/mnt/adlsgen1/test1/dataone.csv')

enter image description here

您可能还希望移动/或复制文件而不包含其子目录

import os

source_dir = "/mnt/yourplateform/source"
dest_dir= "/mnt/yourplateform/destination//"

list_of_files=[]
fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())
path_exists = fs.exists(spark._jvm.org.apache.hadoop.fs.Path(source_dir))
if path_exists == True:
  file_list = fs.listFiles(spark._jvm.org.apache.hadoop.fs.Path(source_dir), True)
  while file_list.hasNext():
    file = file_list.next()
    list_of_files.append(str(file.getPath()))

for file in list_of_files:
  dbutils.fs.mv(file, os.path.join(dest_dir, os.path.basename(file)), recurse=True)

相关问题 更多 >