This is an automated email from the ASF dual-hosted git repository.
xuanwo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/opendal.git
The following commit(s) were added to refs/heads/main by this push:
new ccfef2ba06 chore(integrations/parquet): add README (#4980)
ccfef2ba06 is described below
commit ccfef2ba06fea816e639e5a4fe7c4ccf142573d6
Author: Weny Xu <[email protected]>
AuthorDate: Thu Aug 8 11:04:08 2024 +0800
chore(integrations/parquet): add README (#4980)
* chore(integrations/parquet): add README
* docs: add parquet_opendal to README.md
* chore: lint
---
README.md | 30 +++++++-----
integrations/parquet/README.md | 104 ++++++++++++++++++++++++++++++++++++++++
integrations/parquet/src/lib.rs | 4 +-
3 files changed, 123 insertions(+), 15 deletions(-)
diff --git a/README.md b/README.md
index 474625cf70..b478cadde8 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ OpenDAL offers a unified data access layer, empowering users
to seamlessly and e
## For *ANY* languages
| Name | Release | Docs
|
-|-------------------|--------------------------------------------------|-----------------------------------------------------------------------------------|
+| ----------------- | ------------------------------------------------ |
---------------------------------------------------------------------------------
|
| [Rust Core] | [![Rust Core Image]][Rust Core Link] |
[![Docs Release]][Rust Core Release Docs] [![Docs Dev]][Rust Core Dev Docs]
|
| [C Binding] | - |
[![Docs Dev]][C Binding Dev Docs]
|
| [Cpp Binding] | - |
[![Docs Dev]][Cpp Binding Dev Docs]
|
@@ -61,11 +61,10 @@ OpenDAL offers a unified data access layer, empowering
users to seamlessly and e
[Swift Binding]: bindings/swift/README.md
[Zig Binding]: bindings/zig/README.md
-
## For *ANY* methods
| Name | Description |
Release |
-|-------|--------------------------------------------------------------------|---------------------------|
+| ----- | ------------------------------------------------------------------ |
------------------------- |
| [oay] | Access data via API Gateway |
[![oay image]][oay crate] |
| [oli] | Access data via Command Line (alternative to s3cmd, s3cli, azcopy) |
[![oli image]][oli crate] |
| [ofs] | Access data via POSIX file system API (alternative to s3fs) |
[![ofs image]][ofs crate] |
@@ -82,13 +81,14 @@ OpenDAL offers a unified data access layer, empowering
users to seamlessly and e
## For *ANY* integrations
-| Name | Description
| Release | Docs
|
-|------------------------|----------------------------------------------------------|---------------------------------------------|-----------------------------------------------------------------------------------|
-| [dav-server-opendalfs] | a [dav-server-rs] implementation using opendal.
| [![dav-server image]][dav-server crate] | [![Docs
Release]][dav-server release docs] [![Docs Dev]][dav-server dev docs] |
-| [object_store_opendal] | an [object_store] implementation using opendal.
| [![object_store image]][object_store crate] | [![Docs
Release]][object_store release docs] [![Docs Dev]][object_store dev docs] |
-| [fuse3_opendal] | Access data via integrations to [fuse3]
| [![fuse3 image]][fuse3 crate] | [![Docs Release]][fuse3
release docs] [![Docs Dev]][fuse3 dev docs] |
-| [virtiofs_opendal] | Access data via integrations to
[vhost-user-backend] | [![virtiofs image]][virtiofs crate] |
[![Docs Release]][virtiofs release docs] [![Docs Dev]][virtiofs dev docs]
|
-| [unftp-sbe-opendal] | an [unftp] storage backend implementation using
opendal. | [![unftp-sbe image]][unftp-sbe crate] | [![Docs
Release]][unftp-sbe release docs] [![Docs Dev]][unftp-sbe dev docs] |
+| Name | Description
| Release | Docs
|
+| ---------------------- |
----------------------------------------------------------------------------- |
------------------------------------------- |
---------------------------------------------------------------------------------
|
+| [dav-server-opendalfs] | a [dav-server-rs] implementation using opendal.
| [![dav-server image]][dav-server crate] |
[![Docs Release]][dav-server release docs] [![Docs Dev]][dav-server dev docs]
|
+| [object_store_opendal] | an [object_store] implementation using opendal.
| [![object_store image]][object_store crate] |
[![Docs Release]][object_store release docs] [![Docs Dev]][object_store dev
docs] |
+| [fuse3_opendal] | Access data via integrations to [fuse3]
| [![fuse3 image]][fuse3 crate] |
[![Docs Release]][fuse3 release docs] [![Docs Dev]][fuse3 dev docs]
|
+| [virtiofs_opendal] | Access data via integrations to
[vhost-user-backend] | [![virtiofs image]][virtiofs
crate] | [![Docs Release]][virtiofs release docs] [![Docs
Dev]][virtiofs dev docs] |
+| [unftp-sbe-opendal] | an [unftp] storage backend implementation using
opendal. | [![unftp-sbe image]][unftp-sbe crate] |
[![Docs Release]][unftp-sbe release docs] [![Docs Dev]][unftp-sbe dev docs]
|
+| [parquet_opendal] | Provides
[`parquet`](https://crates.io/crates/parquet) efficient IO utilities |
[![parquet image]][parquet crate] | [![Docs Release]][parquet release
docs] [![Docs Dev]][parquet dev docs] |
[dav-server-opendalfs]: integrations/dav-server/README.md
[dav-server-rs]: https://github.com/messense/dav-server-rs
@@ -125,10 +125,16 @@ OpenDAL offers a unified data access layer, empowering
users to seamlessly and e
[unftp-sbe release docs]: https://docs.rs/unftp-sbe-opendal/
[unftp-sbe dev docs]:
https://opendal.apache.org/docs/unftp-sbe-opendal/unftp_sbe_opendal/
+[parquet_opendal]: integrations/parquet/README.md
+[parquet image]: https://img.shields.io/crates/v/parquet-opendal.svg
+[parquet crate]: https://crates.io/crates/parquet-opendal
+[parquet release docs]: https://docs.rs/parquet-opendal/
+[parquet dev docs]:
https://opendal.apache.org/docs/parquet-opendal/parquet_opendal/
+
## For *ANY* services
| Type | Services
|
-|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------|
+| ------------------------------ |
----------------------------------------------------------------------------------------------------------------------------------------
|
| Standard Storage Protocols | ftp http [sftp] [webdav]
|
| Object Storage Services | [azblob] [cos] [gcs] [obs] [oss] [s3] <br>
[b2] [openstack_swift] [upyun] [vercel_blob]
|
| File Storage Services | fs [alluxio] [azdls] [azfile] [chainsafe]
[compfs] <br> [dbfs] [gridfs] [hdfs] [hdfs_native] [ipfs] [webhdfs]
|
@@ -252,6 +258,6 @@ For more details, see the [Apache Product Name Usage
Guide](https://www.apache.o
## License and Trademarks
-Licensed under the Apache License, Version 2.0:
http://www.apache.org/licenses/LICENSE-2.0
+Licensed under the Apache License, Version 2.0:
<http://www.apache.org/licenses/LICENSE-2.0>
Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or
trademarks of the Apache Software Foundation.
diff --git a/integrations/parquet/README.md b/integrations/parquet/README.md
new file mode 100644
index 0000000000..56b7dd0ba4
--- /dev/null
+++ b/integrations/parquet/README.md
@@ -0,0 +1,104 @@
+# Apache OpenDALâ„¢ parquet integration
+
+[![Build Status]][actions] [![Latest Version]][crates.io] [![Crate
Downloads]][crates.io] [![chat]][discord]
+
+[build status]:
https://img.shields.io/github/actions/workflow/status/apache/opendal/ci_integration_parquet.yml?branch=main
+[actions]: https://github.com/apache/opendal/actions?query=branch%3Amain
+[latest version]: https://img.shields.io/crates/v/parquet_opendal.svg
+[crates.io]: https://crates.io/crates/parquet_opendal
+[crate downloads]: https://img.shields.io/crates/d/parquet_opendal.svg
+[chat]: https://img.shields.io/discord/1081052318650339399
+[discord]: https://opendal.apache.org/discord
+
+`parquet_opendal` provides [`parquet`](https://crates.io/crates/parquet)
efficient IO utilities.
+
+## Useful Links
+
+- Documentation: [release](https://docs.rs/parquet_opendal/) |
[dev](https://opendal.apache.org/docs/object-store-opendal/parquet_opendal/)
+
+## Examples
+
+Add the following dependencies to your `Cargo.toml` with correct version:
+
+```toml
+[dependencies]
+parquet_opendal = "0.0.1"
+opendal = { version = "0.48.0", features = ["services-s3"] }
+```
+
+
+```rust
+use std::sync::Arc;
+
+use arrow::array::{ArrayRef, Int64Array, RecordBatch};
+
+use futures::StreamExt;
+use opendal::{services::S3Config, Operator};
+use parquet::arrow::{AsyncArrowWriter, ParquetRecordBatchStreamBuilder};
+use parquet_opendal::{AsyncReader, AsyncWriter};
+
+#[tokio::main]
+async fn main() {
+ let mut cfg = S3Config::default();
+ cfg.access_key_id = Some("my_access_key".to_string());
+ cfg.secret_access_key = Some("my_secret_key".to_string());
+ cfg.endpoint = Some("my_endpoint".to_string());
+ cfg.region = Some("my_region".to_string());
+ cfg.bucket = "my_bucket".to_string();
+
+ // Create a new operator
+ let operator = Operator::from_config(cfg).unwrap().finish();
+ let path = "/path/to/file.parquet";
+
+ // Create an async writer
+ let writer = AsyncWriter::new(
+ operator
+ .writer_with(path)
+ .chunk(32 * 1024 * 1024)
+ .concurrent(8)
+ .await
+ .unwrap(),
+ );
+
+ let col = Arc::new(Int64Array::from_iter_values([1, 2, 3])) as ArrayRef;
+ let to_write = RecordBatch::try_from_iter([("col", col)]).unwrap();
+ let mut writer = AsyncArrowWriter::try_new(writer, to_write.schema(),
None).unwrap();
+ writer.write(&to_write).await.unwrap();
+ writer.close().await.unwrap();
+
+ /// `gap(512 * 1024)` - Sets the maximum gap size (in bytes) to merge
small byte ranges
+ /// to 512 KB.
+ /// `chunk(16 * 1024 * 1024)` - Sets the chunk size (in bytes) for reading
data to 16 MB.
+ /// `concurrent(16)` - Sets the number of concurrent fetch operations to
16.
+ let reader = operator
+ .reader_with(path)
+ .gap(512 * 1024)
+ .chunk(16 * 1024 * 1024)
+ .concurrent(16)
+ .await
+ .unwrap();
+
+ let content_len = operator.stat(path).await.unwrap().content_length();
+ // `with_prefetch_footer_size(512 * 1024)` - Sets the prefetch footer size
to 512 KB.
+ let reader = AsyncReader::new(reader,
content_len).with_prefetch_footer_size(512 * 1024);
+ let mut stream = ParquetRecordBatchStreamBuilder::new(reader)
+ .await
+ .unwrap()
+ .build()
+ .unwrap();
+ let read = stream.next().await.unwrap().unwrap();
+ assert_eq!(to_write, read);
+}
+```
+
+## Branding
+
+The first and most prominent mentions must use the full form: **Apache
OpenDALâ„¢** of the name for any individual usage (webpage, handout, slides,
etc.) Depending on the context and writing style, you should use the full form
of the name sufficiently often to ensure that readers clearly understand the
association of both the OpenDAL project and the OpenDAL software product to the
ASF as the parent organization.
+
+For more details, see the [Apache Product Name Usage
Guide](https://www.apache.org/foundation/marks/guide).
+
+## License and Trademarks
+
+Licensed under the Apache License, Version 2.0:
http://www.apache.org/licenses/LICENSE-2.0
+
+Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or
trademarks of the Apache Software Foundation.
diff --git a/integrations/parquet/src/lib.rs b/integrations/parquet/src/lib.rs
index ed5d932b10..54239e60b4 100644
--- a/integrations/parquet/src/lib.rs
+++ b/integrations/parquet/src/lib.rs
@@ -15,9 +15,7 @@
// specific language governing permissions and limitations
// under the License.
-//! parquet_opendal provides parquet IO utils.
-//!
-//! AsyncWriter implements AsyncFileWriter trait by using opendal.
+//! parquet_opendal provides parquet IO utilities.
//!
//! ```no_run
//! use std::sync::Arc;