blob: 21637cd90639b134ad6dba8597470fb2e33d54e8 [file] [view]
# 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).