Skip to content
Modin: Speed up your Pandas workflows by changing a single line of code
Python Other
  1. Python 99.6%
  2. Other 0.4%
Branch: master
Clone or download

Latest commit

devin-petersohn Separate indexing and reordering in Modin DataFrame (#1440)
* Resolves #1395

In our internal Modin DataFrame, we previously used mask to
select rows/columns in the order they were given. The problem here is
that the mask functionality was creating potentially thousands of
partitions in an attempt to avoid communication. This killed performance
for all backends, and made operations like sample impossible.
Additionally, train_test_split from sklearn was impacted and not
usable.

To solve this, I separated the indexing and the reordering into two
separate APIs in the internal DataFrame. This gives us flexibility, but
does not impact performance on the already fast and well supported
indexing of values that are sorted. The result is improved performance
for the case where the mask call was also intended to reorder the
columns or rows. Further optimization for the reorder_labels API will
be needed in the future, but because this is separated from the mask,
it will be easier to optimize individually.

Signed-off-by: Devin Petersohn devin.petersohn@gmail.com
Latest commit d617985 May 18, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github #1401 move env files to a separate folder (#1407) May 13, 2020
ci Added PyGithub to docker image (#1437) May 12, 2020
docker add dockerfile (#487) Mar 2, 2019
docs Mad function implementation (#1430) May 14, 2020
examples Fix example aws to install from released version of modin and remove … Jun 24, 2019
modin Separate indexing and reordering in Modin DataFrame (#1440) May 18, 2020
requirements #1401 move env files to a separate folder (#1407) May 13, 2020
stress_tests Add stress tests for modin (#481) Mar 20, 2019
.gitattributes Convert all line endings to LF and test for CRLF in ci Mar 23, 2020
.gitignore Implement nsmallest and nlargest functions (#1441) May 13, 2020
LICENSE Update license Jun 21, 2018
LISCENSE_HEADER Add test to verify that headers are applied to every file Mar 23, 2020
MANIFEST.in use versioneer for versioning using VCS (#1028) Jan 22, 2020
NOTICE Add license header to files Mar 23, 2020
README.md Deleted Unicode apostrophs because they break setup.py May 4, 2020
requirements.txt Fix internal APIs for `read_gbq` Apr 26, 2020
run-tests.sh Re-enable testmon force selection (#1040) Feb 2, 2020
setup.cfg config fix May 6, 2020
setup.py Update Ray version to 0.8.4 Apr 21, 2020
versioneer.py use versioneer for versioning using VCS (#1028) Jan 22, 2020

README.md

Scale your pandas workflows by changing one line of code

To use Modin, replace the pandas import:

# import pandas as pd
import modin.pandas as pd

Installation

Modin can be installed from PyPI:

pip install modin

If you don't have Ray or Dask installed, you will need to install Modin with one of the targets:

pip install modin[ray] # Install Modin dependencies and Ray to run on Ray
pip install modin[dask] # Install Modin dependencies and Dask to run on Dask
pip install modin[all] # Install all of the above

Modin will automatically detect which engine you have installed and use that for scheduling computation!

Pandas API Coverage

pandas Object Ray Engine Coverage Dask Engine Coverage
pd.DataFrame
pd.Series
pd.read_*

Some pandas APIs are easier to implement than other, so if something is missing feel free to open an issue!
Choosing a Compute Engine

If you want to choose a specific compute engine to run on, you can set the environment variable MODIN_ENGINE and Modin will do computation with that engine:

export MODIN_ENGINE=ray  # Modin will use Ray
export MODIN_ENGINE=dask  # Modin will use Dask

This can also be done within a notebook/interpreter before you import Modin:

import os

os.environ["MODIN_ENGINE"] = "ray"  # Modin will use Ray
os.environ["MODIN_ENGINE"] = "dask"  # Modin will use Dask

import modin.pandas as pd

Note: You should not change the engine after you have imported Modin as it will result in undefined behavior

Which engine should I use?

If you are on Windows, you must use Dask. Ray does not support Windows. If you are on Linux or Mac OS, you can install and use either engine. There is no knowledge required to use either of these engines as Modin abstracts away all of the complexity, so feel free to pick either!

Advanced usage

In Modin, you can start a custom environment in Dask or Ray and Modin will connect to that environment automatically. For example, if you'd like to limit the amount of resources that Modin uses, you can start a Dask Client or Initialize Ray and Modin will use those instances. Make sure you've set the correct environment variable so Modin knows which engine to connect to!

For Ray:

import ray
ray.init(plasma_directory="/path/to/custom/dir", object_store_memory=10**10)
# Modin will connect to the existing Ray environment
import modin.pandas as pd

For Dask:

from distributed import Client
client = Client(n_workers=6)
# Modin will connect to the Dask Client
import modin.pandas as pd

This gives you the flexibility to start with custom resource constraints and limit the amount of resources Modin uses.

Full Documentation

Visit the complete documentation on readthedocs: https://modin.readthedocs.io

Scale your pandas workflow by changing a single line of code.

import modin.pandas as pd
import numpy as np

frame_data = np.random.randint(0, 100, size=(2**10, 2**8))
df = pd.DataFrame(frame_data)

To use Modin, you do not need to know how many cores your system has and you do not need to specify how to distribute the data. In fact, you can continue using your previous pandas notebooks while experiencing a considerable speedup from Modin, even on a single machine. Once you've changed your import statement, you're ready to use Modin just like you would pandas.

Faster pandas, even on your laptop

The modin.pandas DataFrame is an extremely light-weight parallel DataFrame. Modin transparently distributes the data and computation so that all you need to do is continue using the pandas API as you were before installing Modin. Unlike other parallel DataFrame systems, Modin is an extremely light-weight, robust DataFrame. Because it is so light-weight, Modin provides speed-ups of up to 4x on a laptop with 4 physical cores.

In pandas, you are only able to use one core at a time when you are doing computation of any kind. With Modin, you are able to use all of the CPU cores on your machine. Even in read_csv, we see large gains by efficiently distributing the work across your entire machine.

import modin.pandas as pd

df = pd.read_csv("my_dataset.csv")

Modin is a DataFrame designed for datasets from 1MB to 1TB+

We have focused heavily on bridging the solutions between DataFrames for small data (e.g. pandas) and large data. Often data scientists require different tools for doing the same thing on different sizes of data. The DataFrame solutions that exist for 1KB do not scale to 1TB+, and the overheads of the solutions for 1TB+ are too costly for datasets in the 1KB range. With Modin, because of its light-weight, robust, and scalable nature, you get a fast DataFrame at small and large data. With preliminary cluster and out of core support, Modin is a DataFrame library with great single-node performance and high scalability in a cluster.

Modin Architecture

We designed Modin to be modular so we can plug in different components as they develop and improve:

Architecture

Visit the Documentation for more information!

modin.pandas is currently under active development. Requests and contributions are welcome!

More information and Getting Involved

You can’t perform that action at this time.