| --- | |
| jupytext: | |
| text_representation: | |
| extension: .md | |
| format_name: myst | |
| kernelspec: | |
| name: python3 | |
| display_name: Python 3 | |
| --- | |
| <!--- | |
| Licensed to the Apache Software Foundation (ASF) under one | |
| or more contributor license agreements. See the NOTICE file | |
| distributed with this work for additional information | |
| regarding copyright ownership. The ASF licenses this file | |
| to you under the Apache License, Version 2.0 (the | |
| "License"); you may not use this file except in compliance | |
| with the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, | |
| software distributed under the License is distributed on an | |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| KIND, either express or implied. See the License for the | |
| specific language governing permissions and limitations | |
| under the License. | |
| --> | |
| # DataFusion in Python | |
| This is a Python library that binds to [Apache Arrow](https://arrow.apache.org/) in-memory query engine [DataFusion](https://github.com/apache/datafusion). | |
| Like pyspark, it allows you to build a plan through SQL or a DataFrame API against in-memory data, parquet or CSV files, run it in a multi-threaded environment, and obtain the result back in Python. | |
| It also allows you to use UDFs and UDAFs for complex operations. | |
| The major advantage of this library over other execution engines is that this library achieves zero-copy between Python and its execution engine: there is no cost in using UDFs, UDAFs, and collecting the results to Python apart from having to lock the GIL when running those operations. | |
| Its query engine, DataFusion, is written in [Rust](https://www.rust-lang.org), which makes strong assumptions about thread safety and lack of memory leaks. | |
| Technically, zero-copy is achieved via the [c data interface](https://arrow.apache.org/docs/format/CDataInterface.html). | |
| ## Install | |
| ```shell | |
| pip install datafusion | |
| ``` | |
| ## Example | |
| ```{code-cell} ipython3 | |
| from datafusion import SessionContext | |
| ctx = SessionContext() | |
| df = ctx.read_csv("pokemon.csv") | |
| df.show() | |
| ``` | |
| ## Where to go next | |
| - **[User Guide](user-guide/index)** — reading data, building queries, tuning | |
| execution, and distributing work. | |
| - **[Extension Guide](extension-guide/index)** — writing a library that plugs | |
| into DataFusion in Python: table providers, functions, extension codecs, and | |
| query planners. | |
| - **[Contributor Guide](contributor-guide/index)** — changing | |
| datafusion-python itself. | |
| ```{toctree} | |
| :hidden: true | |
| :maxdepth: 1 | |
| user-guide/index | |
| extension-guide/index | |
| contributor-guide/index | |
| API Reference <autoapi/index> | |
| links | |
| ``` |