| # Apache DataFusion Java |
| |
| Java bindings for [Apache DataFusion]. Queries run in native Rust and results |
| return to the JVM as [Apache Arrow] batches via the Arrow C Data Interface. |
| |
| [Apache DataFusion]: https://datafusion.apache.org/ |
| [Apache Arrow]: https://arrow.apache.org/ |
| |
| > Early development: no releases yet, API will change. Bug reports and |
| > contributions welcome. |
| |
| ## Quickstart |
| |
| ```java |
| import org.apache.arrow.memory.RootAllocator; |
| import org.apache.arrow.vector.ipc.ArrowReader; |
| import org.apache.datafusion.DataFrame; |
| import org.apache.datafusion.SessionContext; |
| |
| try (var allocator = new RootAllocator(); |
| var ctx = new SessionContext()) { |
| |
| ctx.registerParquet("orders", "/path/to/orders.parquet"); |
| |
| try (DataFrame df = ctx.sql( |
| "SELECT o_orderpriority, COUNT(*) AS n " + |
| "FROM orders GROUP BY o_orderpriority"); |
| ArrowReader reader = df.collect(allocator)) { |
| while (reader.loadNextBatch()) { |
| var batch = reader.getVectorSchemaRoot(); |
| // ... |
| } |
| } |
| } |
| ``` |
| |
| `SessionContext` and `DataFrame` are `AutoCloseable` and not thread-safe. |
| |
| ## Project status |
| |
| Query interfaces: |
| |
| - [x] SQL: `SessionContext.sql(String)` |
| - [x] DataFrame: `select`, `filter` (other transformations TBD) |
| - [x] DataFusion-Proto `LogicalPlanNode`: `SessionContext.fromProto(byte[])`. |
| The `datafusion-proto` Java classes are generated by the build. |
| |
| Data sources: |
| |
| - [x] Parquet via `registerParquet` / `readParquet`, with `ParquetReadOptions` |
| - [ ] CSV, JSON, Avro |
| - [ ] Custom catalog and table providers |
| |
| Results: |
| |
| - [x] `DataFrame.collect(allocator)` — Arrow C Data Interface stream |
| - [x] `DataFrame.count()`, `show()`, `show(int)` |
| - [x] `SessionContext.tableSchema(String)` |
| |
| Not yet: |
| |
| - [ ] `SessionConfig` / `RuntimeEnv` knobs |
| - [ ] Java UDFs |
| - [ ] `write_*` outputs |
| |
| ## Requirements |
| |
| JDK 17+. Building from source: see [CONTRIBUTING.md](CONTRIBUTING.md). |
| |
| ## Layout |
| |
| - `src/` — Java sources and tests |
| - `native/` — Rust crate (JNI + Arrow C Data Interface) |
| |
| ## Contributing |
| |
| Open an issue to discuss non-trivial changes before sending a PR. |
| See [CONTRIBUTING.md](CONTRIBUTING.md). |
| |
| ## License |
| |
| Apache License 2.0. See [LICENSE.txt](LICENSE.txt) and [NOTICE.txt](NOTICE.txt). |