PyArrow:如何使用新的文件系统接口将文件从本地复制到远程?

2024-06-07 21:55:16 发布

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

有谁能给我一个提示,告诉我如何使用PyArrow's new filesystem interface(即upload,copyFromLocal)将文件从本地文件系统复制到HDFS文件系统

我反复阅读了文档,并尝试了一些方法(将copy_file()与FS uri一起使用),但似乎都不起作用。legacy HDFS API的用法很简单,但它已被弃用,尽管新的API似乎不完整。当然,在文件描述符之间移动数据块是一个解决方案,但是为什么copy_file()存在呢


Tags: 文件方法文档apinewhdfsurifs
1条回答
网友
1楼 · 发布于 2024-06-07 21:55:16

新(或旧)文件系统API中没有用于在文件系统之间传输文件的函数

Of course moving chunks of data among file descriptors is a solutions

我不确定这是否是您所想的,但这里有一个简单的实用程序(和演示),介绍如何从python执行此操作:

import filecmp
import pyarrow.fs as pafs

BATCH_SIZE = 1024 * 1024

def transfer_file(in_fs, in_path, out_fs, out_path):
    with in_fs.open_input_stream(in_path) as in_file:
        with out_fs.open_output_stream(out_path) as out_file:
            while True:
                buf = in_file.read(BATCH_SIZE)
                if buf:
                    out_file.write(buf)
                else:
                    break

local_fs = pafs.LocalFileSystem()
s3fs = pafs.S3FileSystem()
in_path = '/tmp/in.data'
out_path = 'mybucket/test.data'
back_out_path = '/tmp/in_copy.data'

transfer_file(local_fs, in_path, s3fs, out_path)
transfer_file(s3fs, out_path, local_fs, back_out_path)

files_match = filecmp.cmp(in_path, back_out_path)
print(f'Files Match: {files_match}')

我希望transfer_file能有好的表现。可能有一些情况(例如,从S3读取)可以从使用read_at的并行读取中获益,这需要更高的复杂性,但也应该是可行的

but why copy_file() exists then?

copy_file将文件从文件系统上的一个名称复制到同一文件系统上的另一个名称。它不能用于在不同的文件系统之间复制文件

相关问题 更多 >

    热门问题