尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Apache Arrow C++ 文件系统(Filesystems)API 完全指南:统一抽象、URI 工厂与本地/S3/HDFS/GCS/Azure 多后端实战

发布时间:2026/9/23 21:14:49

资讯中心
01
ARTICLE

Apache Arrow C++ 文件系统(Filesystems)API 完全指南:统一抽象、URI 工厂与本地/S3/HDFS/GCS/Azure 多后端实战

Apache Arrow C++ 文件系统(Filesystems)API 完全指南:统一抽象、URI 工厂与本地/S3/HDFS/GCS/Azure 多后端实战
数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载Apache Arrow C 提供了统一、抽象的文件系统 APIarrow::fs让开发者可以用同一套FileSystem接口操作本地磁盘、Amazon S3、Hadoop HDFS、Google Cloud StorageGCS与 Azure Blob / ADLS Gen2并以 URI如file://、s3://、hdfs://、gs://、abfs://驱动的工厂函数一键创建对应后端。本文基于 Apache Arrow 官方 API 文档docs/source/cpp/api/filesystem.rst与仓库中 cpp/src/arrow/filesystem 的源码实现系统梳理这套 API 的接口设计、工厂与注册机制、六大内置实现及各自的选项配置帮助你直接上手编写跨存储后端的 Arrow 文件读写代码。一、统一抽象FileSystem 接口层的核心概念Apache Arrow 文件系统模块将“文件系统”抽象为一个继承自arrow::fs::FileSystem的纯虚接口类其完整定义位于 cpp/src/arrow/filesystem/filesystem.h。所有后端本地、S3、HDFS、GCS、Azure都是该接口的实现因此上层代码例如 dataset、parquet 读写、IPC 流可以无差别地操作任意存储后端。1. 入口类型FileTypearrow::fs::FileType是一个int8_t枚举用于描述目录条目的类型定义于 cpp/src/arrow/filesystem/type_fwd.h枚举值含义NotFound条目不存在Unknown条目存在但类型未知如 Unix socket、字符设备或 Windows 的 NUL / CON 等特殊文件File普通文件Directory目录2. 条目信息FileInfoarrow::fs::FileInfo是文件系统 API 返回的“文件条目元数据”载体filesystem.h核心成员包括type()/set_type()条目类型FileTypepath()/set_path()文件在文件系统中的完整路径size()/set_size()字节大小只有普通文件保证有大小未设置时为kNoSize-1mtime()/set_mtime()最后修改时间类型为TimePoint自 epoch 起纳秒计数的system_clock::time_point未设置时为kNoTimebase_name()路径中最后一个目录分隔符之后的文件名dir_name()文件基名之前的目录部分extension()文件扩展名不含点号IsFile()/IsDirectory()便捷判断方法内置FileInfo::ByPath比较器可按路径排序或用路径作为 STL 键。FileInfo继承自util::EqualityComparableEquals()比较type、path、size、mtime四个字段。3. 批量选择器FileSelectorarrow::fs::FileSelector用于一次性获取目录下多个条目的信息filesystem.hbase_dir要选择的目录若该路径存在但不是目录则返回错误allow_not_found当base_dir不存在时的行为——false返回错误true返回空选择结果recursive是否递归进入子目录max_recursion递归的最大子目录深度默认INT32_MAX即不限深度。默认构造值为allow_not_found(false)、recursive(false)、max_recursion(INT32_MAX)。4. 核心虚接口FileSystemarrow::fs::FileSystem抽象出以下几组操作filesystem.h元数据与查询GetFileInfo(path)获取单条目信息。符号链接会被递归解引用不存在或不可达的路径返回Ok状态且FileType为NotFound返回Error状态才表示真正的异常底层 I/O 错误等。GetFileInfo(std::vectorstd::string)批量查询并配有异步版本GetFileInfoAsync。GetFileInfo(FileSelector)按选择器查询选择器的 base 目录本身不会出现在结果中。GetFileInfoGenerator(FileSelector)流式异步版本返回FileInfoGeneratorstd::functionFutureFileInfoVector()。注意该生成器不可重入——必须等待前一个 Future 完成后才能再次调用。NormalizePath(path)路径规范化默认实现为空操作子类可覆盖如处理 Windows 本地路径。PathFromUri(uri)/MakeUri(path)URI 与路径的相互转换。PathFromUri会校验给定文件系统与 URI scheme 是否兼容并归一化路径分隔符但它只检查 URI scheme 合法不检测 region 或 endpoint 覆盖不一致等问题。Equals()文件系统等价性判断type_name()返回后端类型名如local、s3、hdfs、abfs。目录与文件管理CreateDir(path, recursive)创建目录及子目录目录已存在也视为成功省略参数时默认recursive true。DeleteDir(path)递归删除目录及其内容。DeleteDirContents(path, missing_dir_ok)递归删除目录内容但不删目录本身禁止传空路径或/并提供异步版本。DeleteRootDirContents()删除根目录内容实验性 API实现方可能因过于危险而返回错误。DeleteFile(path)/DeleteFiles(paths)删除文件DeleteFiles默认逐个顺序删除。Move(src, dest)移动/重命名。若目标已存在且为非空目录则报错若与源类型相同则被替换否则行为由实现决定。CopyFile(src, dest)复制文件。目标已存在且为目录时报错否则直接覆盖。流式 I/OOpenInputStream(path)/OpenInputStream(FileInfo)顺序读输入流后者假定FileInfo信息有效可据此优化访问如省去查询文件大小与存在性。OpenInputFile(path)/OpenInputFile(FileInfo)随机访问输入文件io::RandomAccessFile同样有基于FileInfo的重载及异步版本。OpenOutputStream(path, metadata)顺序写输出流若目标已存在会截断。带KeyValueMetadata参数可传入对象元数据。OpenAppendStream(path, metadata)追加写流目标不存在则创建空文件。注意部分实现不支持高效追加此时会返回NotImplemented官方建议改用 dataset 层写多文件。生命周期EnsureFinalized()filesystem.h确保所有已注册的文件系统实现被 finalize。各个 finalizer 可能等待并发调用结束以避免竞态调用之后所有文件系统 API 将报错。该函数的并发同步由用户负责。二、高层工厂函数一行代码创建任意后端FileSystemFromUri()是推荐的统一入口通过 URI scheme 自动分派到对应实现其底层实现在 cpp/src/arrow/filesystem/filesystem.ccFileSystemFromUri(uri, out_path nullptr)按 URI 创建文件系统。识别 schemefile、mock、hdfs、viewfs、s3、gs、gcs在启用对应编译开关时还支持abfs/abfss并支持通过RegisterFileSystemFactory注册自定义 scheme。FileSystemFromUri(uri, io_context, out_path nullptr)带自定义io::IOContext的版本文件系统会与该上下文关联。FileSystemFromUriOrPath(uri, out_path nullptr)比上面更宽松——除 URI 外还接受绝对本地路径并将其视为本地文件系统路径同时归一化路径分隔符。用法示例来自 cpp/examples/arrow/filesystem_usage_example.cc#include arrow/filesystem/filesystem.h namespace fs arrow::fs; std::string uri s3://my-bucket/data; // 或 file:///some/local/path 等 std::string path; ARROW_ASSIGN_OR_RAISE(auto fs, arrow::fs::FileSystemFromUri(uri, path)); // path 为 URI 中文件系统内部的路径部分 fs::FileSelector sel; sel.base_dir /; ARROW_ASSIGN_OR_RAISE(auto infos, fs-GetFileInfo(sel)); for (const auto info : infos) { std::cout - info std::endl; }在分派逻辑中FileSystemFromUriReal若 scheme 未被工厂注册表命中则依次按编译开关处理 AzureARROW_AZURE、GCSARROW_GCS、S3、HDFS 等未编译对应支持时会返回类似Got Azure Blob File System URI but Arrow compiled without Azure Blob File System support的Status::NotImplemented。因此使用云存储后端前务必确认你的 Arrow 构建开启了对应编译选项。此外模块还提供跨文件系统复制文件的便捷函数CopyFilesfilesystem.hCopyFiles(sources, destinations, io_context, chunk_size 1024*1024, use_threads true)源与目标在同一FileSystem时直接调用FileSystem::CopyFile否则以流方式分块复制默认 1 MiB 块、多线程。另一个重载接受(source_fs, source_sel, destination_fs, destination_base_dir, ...)按选择器复制选中的文件并在目标 base 目录下按需创建目录。三、工厂注册机制自定义 scheme 与动态加载除了内置后端Arrow 允许把自定义文件系统实现注册进统一工厂RegisterFileSystemFactory(scheme, factory, finalizer {})filesystem.h注册一个 scheme 对应的工厂函数FileSystemFactory。若 scheme 已被注册新工厂将被忽略并触发 KeyError。FileSystemRegistrar/ARROW_REGISTER_FILESYSTEM宏可在命名空间作用域定义静态实例让工厂在程序加载时自动注册在main()之前完成若位于动态库中则在dlopen()/LoadLibrary()返回前完成。宏展开形式#define ARROW_REGISTER_FILESYSTEM(scheme, factory_function, finalizer) \ ::arrow::fs::FileSystemRegistrar { \ scheme, ::arrow::fs::FileSystemFactory{factory_function, __FILE__, __LINE__}, \ finalizer \ }LoadFileSystemFactories(libpath)从共享库动态加载文件系统实现。文件系统实现可以打包成独立共享库、仅在显式加载时才注册当 Arrow 被静态链接时注册表可能出现隔离的重复副本此函数负责合并注册表。FileSystemFactory是一个带file/line溯源字段的可调用对象filesystem.h其operator通过注册定义处的文件和行号判断两个工厂是否等价以解决 Arrow 同时静态链接进可执行文件与动态库导致的重复注册问题。仓库中的 cpp/examples/arrow/filesystem_definition_example.cc 演示了完整的自定义文件系统注册流程定义一个派生于fs::FileSystem的ExampleFileSystem用ARROW_REGISTER_FILESYSTEM(example, factory, {})注册example://scheme而 filesystem_usage_example.cc 则演示用LoadFileSystemFactories()动态加载后通过FileSystemFromUri(example:///example_file)使用它。这两个示例展示了“在 Arrow 源码树之外编写并注册自定义 FileSystem”的推荐做法。四、SubTreeFileSystem子树视图包装器SubTreeFileSystem把另一个文件系统“套”在一个固定 base 路径之下对外暴露该文件系统某个子树的逻辑视图filesystem.h。构造函数SubTreeFileSystem(base_path, base_fs)若base_path非法构造可能 abort。type_name()返回subtree可分别通过base_path()和base_fs()取回包装参数。它把所有路径操作转为PrependBase加前缀/StripBase去前缀后委托给base_fs_并重写了NormalizePath、PathFromUri、Equals以及全套 CRUD 与流接口。适用场景把本地目录如/data/parquet伪装成某个“根目录”使上层代码无需感知真实路径。需要留意文档中的三点限制它工作在抽象路径上即使用正斜杠与单一根/Windows 路径不保证可用不提供任何安全保证——符号链接可能“逃逸”出子树访问底层文件系统的其他部分它基于抽象路径拼接不校验路径真实性。同类包装器还有SlowFileSystem它在委托文件系统操作时人为插入延迟用于延迟模拟与测试构造时传入io::LatencyGenerator或平均延迟秒数测试代码位于 cpp/src/arrow/filesystem/test_util.h。五、LocalFileSystem本地文件系统LocalFileSystem访问本机磁盘只处理/分隔的路径Windows 反斜杠路径需要由调用方自行转换cpp/src/arrow/filesystem/localfs.h。符号链接细节被抽象掉总是跟随符号链接删除条目时除外。LocalFileSystemOptions提供以下可调参数参数默认值说明use_mmapfalseOpenInputStream/OpenInputFile是否返回 mmap 映射文件而非普通文件directory_readahead16实验性GetFileInfoGenerator并行处理的目录最大数file_info_batch_size1000实验性GetFileInfoGenerator聚合进每个FileInfoVector块的最大条目数。因为每条FileInfo都需要一次独立的stat系统调用大目录会非常耗时达到此块大小即产出一个FileInfoVector可显著降低消费方等待首块数据的初始延迟使用方式arrow::fs::LocalFileSystemOptions options; options.use_mmap true; // 启用 mmap auto fs std::make_sharedarrow::fs::LocalFileSystem(options); // 或者直接用 URI 工厂 ARROW_ASSIGN_OR_RAISE(auto fs2, arrow::fs::FileSystemFromUri(file:///data/parquet));本地后端的类型名为local并实现了MakeUri把本地路径转为file://URI。六、S3FileSystemAmazon S3 与兼容对象存储S3 后端封装 AWS SDK C类型名为s3。其 API 的完整定义位于 cpp/src/arrow/filesystem/s3fs.h包含三层全局初始化选项、文件系统选项、文件系统本体。1. 全局初始化InitializeS3使用S3FileSystem之前必须先调用InitializeS3(S3GlobalOptions)且程序结束前必须调用FinalizeS3()否则可能在退出时发生段错误arrow::fs::S3GlobalOptions global_options; global_options.log_level arrow::fs::S3LogLevel::Fatal; ARROW_RETURN_NOT_OK(arrow::fs::InitializeS3(global_options)); // ... 使用 S3FileSystem ... ARROW_RETURN_NOT_OK(arrow::fs::FinalizeS3());S3GlobalOptions字段log_levelS3LogLevel枚举Off/Fatal/Error/Warn/Info/Debug/Trace。Defaults()会优先从环境变量ARROW_S3_LOG_LEVEL读取合适的值num_event_loop_threadsAWS I/O 事件循环线程数默认1AWS 官方建议当连接数预期最多数百时取 1。此外还有便捷的EnsureS3Initialized()/EnsureS3Finalized()仅在未初始化/未关闭时执行相应动作、状态查询IsS3Initialized()/IsS3Finalized()以及工具函数ResolveS3BucketRegion(bucket)。2. 选项S3Options字段默认说明region空AWS region。未设置时由 AWS SDK 决定1.8 之前硬编码us-east-11.8 之后用启发式环境变量、配置文件、EC2 元数据服务器connect_timeout-1socket 连接超时秒负数用 SDK 默认通常 1 秒request_timeout-1Windows / macOS 上的读取超时秒负数用 SDK 默认通常 3 秒在非 Windows/macOS 上忽略endpoint_override空覆盖 region 的连接串如localhost:9000用于 MinIO、Ceph RGW 等 S3 兼容服务schemehttps连接传输协议默认 HTTPSrole_arn/session_name/external_id/load_frequency—AssumeRole 参数load_frequency为刷新临时凭证的间隔秒数默认 900proxy_options—S3ProxyOptions含scheme、host、port默认 -1、username、password可用FromUri(http://user:passhost:port)构造credentials_provider/credentials_kind—自定义 AWS 凭证提供者与类型Anonymous/Default/Explicit/Role/WebIdentityforce_virtual_addressingfalse是否强制虚拟风格 bucket 寻址false时仅在endpoint_override为空时启用。用于只支持 virtual hosted-style 访问的非 AWS 后端background_writestrueOpenOutputStream的写是否后台异步发出、不阻塞调用线程allow_bucket_creationfalse是否允许创建 bucket创建时使用非公开默认设置无 bucket 策略、无资源标签allow_bucket_deletionfalse是否允许删除 bucketcheck_directory_existence_before_creationfalseCreateDir是否先检查目录存在。默认采取“先试创建再捕获错误”的乐观策略对 GCS 这类键值存储过多创建调用会触发对象变更速率限制或当父目录无创建权限时需要置为truedefault_metadata空OpenOutputStream的默认元数据传入非空 metadata 时被忽略retry_strategy—自定义S3RetryStrategy决定哪些错误类型重试及重试间隔凭证配置推荐用静态工厂S3Options::Defaults()使用默认 AWS 凭证提供链环境变量 / 配置文件。S3Options::Anonymous()匿名访问仅能读公共 bucket。S3Options::FromAccessKey(access_key, secret_key, session_token )显式 AccessKey/SecretKey可选 STS 临时session_token。S3Options::FromAssumeRole(role_arn, session_name, external_id, load_frequency, stsClient)AssumeRole 凭证。S3Options::FromAssumeRoleWithWebIdentity()通过 Web Identity Token 换取临时凭证基于 AWS SDK 环境变量。相应的实例方法ConfigureDefaultCredentials()、ConfigureAnonymousCredentials()、ConfigureAccessKey()、ConfigureAssumeRoleCredentials()、ConfigureAssumeRoleWithWebIdentityCredentials()可对已有对象就地配置。3. 文件系统实例auto options arrow::fs::S3Options::FromAccessKey(AKIA..., secret...); // 访问 MinIO / Ceph 等本地兼容服务 options.endpoint_override localhost:9000; options.scheme http; ARROW_ASSIGN_OR_RAISE(auto fs, arrow::fs::S3FileSystem::Make(options));S3FileSystem还提供region()实际连接的 region、options()构造时的原始选项。实现注意事项源码注释明确标注OpenInputStream/OpenInputFile的读取是同步且无缓冲的建议包一层BufferedInputStream或使用自定义 readahead 策略避免空闲等待基于FileInfo的重载可省去一次 HEAD 请求。OpenOutputStream的写是缓冲的是否异步取决于background_writes。bucket 是特殊实体其上可用的操作可能受限或开销更大。七、HadoopFileSystemHDFS 后端HadoopFileSystem是对arrow/io/hdfs的封装cpp/src/arrow/filesystem/hdfs.h类型名为hdfs使 HDFS 也能通过统一FileSystemAPI 操作。HdfsOptions包含connection_configio::HdfsConnectionConfig含 host、port、driver 等 HDFS 连接配置buffer_size写接口缓冲区大小默认 0replication副本数默认 3default_block_size默认块大小默认 0。并提供便捷配置方法ConfigureEndPoint(host, port)、ConfigureReplication(replication)、ConfigureUser(user_name)、ConfigureBufferSize(buffer_size)、ConfigureBlockSize(block_size)、ConfigureKerberosTicketCachePath(path)、ConfigureExtraConf(key, val)。创建实例arrow::fs::HdfsOptions options; options.ConfigureEndPoint(namenode.local, 8020); options.ConfigureUser(hdfs_user); ARROW_ASSIGN_OR_RAISE(auto fs, arrow::fs::HadoopFileSystem::Make(options)); // 或直接 FileSystemFromUri(hdfs://namenode.local:8020/path)八、GcsFileSystemGoogle Cloud StorageGcsFileSystem封装 Google Cloud Storagecpp/src/arrow/filesystem/gcsfs.h。GCS 的核心抽象是 bucketbucket 是对象命名空间全局唯一与 object单个不可变 blob最大 5 TiBGCS 没有真正的文件夹本实现通过“前缀列出 目录 marker 对象 元数据标注”的方式模拟目录语义。1. 凭证GcsCredentialsGcsCredentials持有凭证信息及重建凭证所需的数据支持匿名、access token含过期时间expiration()、目标服务账号模拟target_service_account()、JSON 服务账号密钥json_credentials()等形态内部用不透明 holderGcsCredentialsHolder避免在 Arrow 头文件中暴露 GCS 库细节。2. 选项GcsOptionscredentials凭证对象endpoint_override/schemeendpoint 覆盖与传输协议默认httpsdefault_bucket_location创建 bucket 的位置retry_limit_seconds底层错误重试的总时间上限默认策略为最多重试 15 分钟default_metadataOpenOutputStream的默认对象元数据project_id创建 bucket 所需的项目 ID未设置时读取GOOGLE_CLOUD_PROJECT环境变量。大多数 I/O 操作不需要 project id只有创建新 bucket 需要。凭证工厂方法GcsOptions::Defaults()使用 Google 应用默认凭证ADC可通过GOOGLE_APPLICATION_CREDENTIALS环境变量覆盖行为与gcloudCLI 一致GcsOptions::Anonymous()匿名访问GcsOptions::FromAccessToken(token, expiration)带过期时间的 access token过期后需手动刷新GcsOptions::FromImpersonatedServiceAccount(base_credentials, target_service_account)服务账号模拟GcsOptions::FromServiceAccountCredentials(json_object)从 JSON 格式的服务账号密钥构造密钥文件应视为密码级机密。创建实例使用GcsFileSystem::Make(options)URI scheme 为gs或gcs。实现要点CreateDir创建根目录即创建新 bucket可能比大多数 GCS 操作慢递归列表与非递归列表耗时几乎相同GCS 列表时间与 prefix 下对象数量成正比DeleteRootDirContents()未实现过于危险。九、AzureFileSystemAzure Blob Storage 与 ADLS Gen2AzureFileSystem类型名abfs同时支持 Azure Blob StorageABS与 Azure Data Lake Storage Gen2ADLS Gen2——ADLS Gen2 并非独立服务而是构建在 Blob Storage 之上、提供文件系统语义、文件级安全与 Hadoop 兼容能力的一组能力cpp/src/arrow/filesystem/azurefs.h。1. 选项AzureOptionsaccount_name存储账户名所有服务 URL 均基于它构造blob_storage_authorityBlob 服务 hostname[:port]默认.blob.core.windows.net相对域名会把账户名作为前缀FQDN 则按原样使用账户名跟在 URL 路径中dfs_storage_authorityADLS Gen2 服务地址默认.dfs.core.windows.netblob_storage_scheme/dfs_storage_scheme传输协议均默认httpsdefault_metadataOpenOutputStream的默认元数据。默认认证由 Azure SDK 的凭证链处理可能读取的环境变量包括AZURE_TENANT_ID、AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_AUTHORITY_HOST、AZURE_CLIENT_CERTIFICATE_PATH、AZURE_FEDERATED_TOKEN_FILE。也可显式调用配置方法ConfigureDefaultCredential()、ConfigureAnonymousCredential()、ConfigureAccountKeyCredential(account_key)、ConfigureClientSecretCredential(tenant_id, client_id, client_secret)、ConfigureManagedIdentityCredential(client_id)、ConfigureCLICredential()、ConfigureWorkloadIdentityCredential()、ConfigureEnvironmentCredential()。AzureOptions::FromUri()支持四种 URI 形态azurefs.habfs[s]://[:password]account.blob.core.windows.net[/container[/path]]abfs[s]://container[:password]account.dfs.core.windows.net[/path]abfs[s]://[account[:password]]host[.domain][:port][/container[/path]]兼容 Azurite 等 Blob 兼容服务abfs[s]://[account[:password]]container[/path]前两者的简写abfs与abfss没有区别默认都走 HTTPS可通过 query 参数enable_tlsfalse强制 HTTP。支持的 query 参数还有blob_storage_authority、dfs_storage_authority、credential_kinddefault/anonymous/workload_identity/environment/cli、tenant_idclient_idclient_secret组合触发 ClientSecret 或 ManagedIdentity 凭证。2. 文件系统行为要点DeleteDir的原子性仅在有 Hierarchical NamespaceHNS的账户上得到保证DeleteDirContents可能部分删除后返回错误状态DeleteRootDirContents出于安全原因返回NotImplemented。DeleteFile通过租约lease保证父目录不会在删除 blob 期间消失应用可安全重试。Move仅在启用 HNS 的账户上支持且不支持跨容器移动当dest已存在但操作失败时保证dest不丢失。文件系统对 Move 的成功条件做了严格定义源必须存在、dest 不能是 src 的严格路径前缀、目录不能成为自己的子目录等。OpenAppendStream受 ADLS Gen2 与 Blob API 互操作限制影响同一文件实例不能用 Blob API 与 ADLS API 混写。十、综合应用建议与最佳实践结合官方 API 文档与源码实现给出几条工程建议统一走FileSystemFromUri/FileSystemFromUriOrPath工厂把后端选择从业务代码中剥离URI 即配置。从源码看FileSystemFromUriOrPath会自动把绝对本地路径识别为本地文件系统便于本地开发与云上部署共享同一套代码。优先使用FileInfo重载的流打开接口OpenInputStream(info)、OpenInputFile(info)在 S3、GCS 等后端可避免额外的 HEAD/元数据请求显著降低小文件场景的开销。注意后端的实现差异追加写OpenAppendStream并非所有后端都支持可能返回NotImplementedGCS 已标记废弃、S3 语义受限DeleteRootDirContents在 GCS/Azure 上故意未实现S3 顺序读是无缓冲的应自行包裹缓冲流。正确管理生命周期使用 S3 前必须InitializeS3进程结束前必须FinalizeS3否则存在退出段错误风险EnsureFinalized()之后所有文件系统 API 将不可用调用同步由用户负责。本地开发对接云存储S3 后端可用endpoint_overrideschemehttp对接 MinIO/CephAzure 后端可用 AzuriteURI 形态 3GCS 可用endpoint_override对接仿真器——这些参数均可在S3Options、AzureOptions、GcsOptions中直接配置。大目录遍历使用生成器GetFileInfoGenerator结合LocalFileSystemOptions::file_info_batch_size/directory_readahead可按批次流式消费FileInfo避免大目录下初始延迟过高。关于各后端更深入的行为与边界可继续阅读 cpp/src/arrow/filesystem 下的实现与测试如localfs_test.cc、s3fs_test.cc、hdfs_test.cc、gcsfs_test.cc、azurefs_test.cc以及官方示例 filesystem_definition_example.cc 与 filesystem_usage_example.cc 了解自定义后端的完整写法。赞分享数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载相关推荐Apache Arrow C 文件系统FilesystemAPI 完全指南统一抽象、工厂注册与本地/S3/HDFS/GCS/Azure 实现详解Apache Arrow C 文件系统FilesystemAPI 完全指南统一抽象、工厂注册与本地/S3/HDFS/GCS/Azure 实现详解 导读数据工程数据分析大数据Apache Arrow C 文件系统 API 深度指南从本地磁盘到 S3、HDFS、GCS 与 Azure 的统一访问层Apache Arrow C 文件系统 API 深度指南从本地磁盘到 S3、HDFS、GCS 与 Azure 的统一访问层 导读 本文以 Apache A大数据数据分析数据工程序列化PyArrow 文件系统统一抽象Apache Arrow 多后端文件系统 API 完全指南PyArrow 文件系统统一抽象Apache Arrow 多后端文件系统 API 完全指南 导读 pyarrow.fs 是 Apache Arrow Pyth数据工程大数据序列化数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。