apache / apache/parquet-java

Pure Java NIO LocalInputFile Implementation

未关闭
#3,028 1 条评论 3 个 reaction 已指派 0 人 在 GitHub 查看
Type: enhancement
主要语言
Java
星标
3.1k
派生
1.6k
平均合并
3 天 12 小时
30 天内合并 PR
33

描述

### Describe the enhancement requested

Hi there!

In an effort to reduce our coupling to Hadoop, and slim down our shaded Jar sizes, we transitioned all our Parquet reading / writing to using the non-Hadoop public interfaces. We leveraged Java NIO interfaces for reading / writing I/O, as detailed in this blog post here: https://blakesmith.me/2024/10/05/how-to-use-parquet-java-without-hadoop.html

The problem we hit: The current `LocalInputFile` implementation [falls back to Path#toFile and RandomAccessFile](https://github.com/apache/parquet-java/blob/master/parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java#L42) calls for I/O operations. Once we plug in other `java.nio.file.FileSystem` implementations ([Such as using AWS' Java NIO SPI implementation](https://github.com/awslabs/aws-java-nio-spi-for-s3/)), the `LocalInputFile` implementation doesn't work anymore.

We've created our own implementation of `LocalInputFile` called `NioInputFile`, that implements the interface, but exclusively using Java NIO operations, instead of falling back to older Java file APIs. You can see the code in the above linked blog post, and also in this gist here: https://gist.github.com/blakesmith/5c08a2504c08c96f9fb62658ec6c9b28

A few questions, before I start sending patches:

1. Is this alternative implementation something that folks are interested in incorporating upstream into Parquet itself?
2. If so, would we prefer to update `LocalInputFile`, or add `NioInputFile` as another implementation of `LocalInputFile`? Note that in our case, we're doing buffered I/O to S3 with this implementation, so it's not technically a "local" file, either way, just one that talks to the Java NIO abstractions.

Of note is that `LocalOutputFile` is working just fine with Java NIO operations, even when we're doing remote S3 I/O.

Thanks you so much! Parquet has been transformative for us, and we're excited to help drive more adoption however we can.

### Component(s)

Core

贡献指南

这个仓库没有索引到贡献指南

调研方向

Read parquet-common/src/main/java/org/apache/parquet/io/LocalInputFile.java and compare it with the NioInputFile implementation linked in the issue. Check how LocalOutputFile uses Java NIO, then clarify whether completion means updating LocalInputFile or adding a separate implementation that works with alternate FileSystem providers.

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
backend
Issue 类型
功能
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。