Apache DataFusion Java
May 28, 2026 ยท View on GitHub
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.
Early development: the API will change between releases. Bug reports and contributions welcome.
Quickstart
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();
// ...
}
}
}
See the User Guide for installation, the DataFrame and SQL APIs, and Parquet ingestion. See the Contributor Guide for build, test, and release workflows.
:maxdepth: 1
:caption: Links
:hidden:
GitHub Repository <https://github.com/apache/datafusion-java>
Issue Tracker <https://github.com/apache/datafusion-java/issues>
Apache DataFusion <https://datafusion.apache.org/>
Code of Conduct <https://github.com/apache/datafusion/blob/main/CODE_OF_CONDUCT.md>
:maxdepth: 2
:caption: Documentation
:hidden:
User Guide <user-guide/index>
Contributor Guide <contributor-guide/index>