{ "cells": [ { "cell_type": "markdown", "id": "ccf4ea1c", "metadata": {}, "source": [ "# Dask\n", "\n", "Dask erfüllt zwei verschiedene Aufgaben:\n", "\n", "1. die dynamische Aufgabenplanung wird optimiert, ähnlich wie bei [Airflow](https://airflow.apache.org/), [Luigi](https://github.com/spotify/luigi) oder [Celery](https://docs.celeryq.dev/en/stable/)\n", "2. Arrays, Dataframes und Lists werden parallel mit dynamischem Task Scheduling ausgeführt." ] }, { "cell_type": "markdown", "id": "d6041d52", "metadata": {}, "source": [ "## Skalierung von Laptops bis hin zu Clustern\n", "\n", "\n", "Dask kann mit uv auf einem Laptop installiert werden und erweitert die Größe der Datensätze von *passt in den Arbeitsspeicher* zu *passt auf die Festplatte*. Dask kann jedoch auch auf einen Cluster mit Hunderten von Rechnern skaliert werden. Dask ist robust, flexibel, Data Local und hat eine geringe Latenzzeit. Weitere Informationen findet ihr in der Dokumentation zum [Distributed Scheduler](https://distributed.dask.org/en/latest/). Dieser einfache Übergang zwischen einer einzelnen Maschine und einem Cluster ermöglicht einen einfachen Start und ein Wachstum nach Bedarf." ] }, { "cell_type": "markdown", "id": "4e332597", "metadata": {}, "source": [ "## Dask installieren\n", "\n", "\n", "Ihr könnt alles installieren, was für die meisten gängigen Anwendungen von Dask erforderlich ist (Arrays, Dataframes, …). Dies installiert sowohl Dask als auch Abhängigkeiten wie NumPy, Pandas, usw., die für verschiedene Arbeiten benötigt werden:\n", "\n", "``` bash\n", "$ uv add \"dask[complete]\"\n", "```\n", "\n", "Es können aber auch nur einzelne Subsets installiert werden:\n", "\n", "``` bash\n", "$ uv add \"dask[array]\"\n", "$ uv add \"dask[dataframe]\"\n", "$ uv add \"dask[diagnostics]\"\n", "$ uv add \"dask[distributed]\"\n", "```" ] }, { "cell_type": "markdown", "id": "cb34d835", "metadata": {}, "source": [ "### Testen der Installation" ] }, { "cell_type": "code", "execution_count": 1, "id": "6d1b3a12", "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[1m============================= test session starts ==============================\u001b[0m\n", "platform darwin -- Python 3.7.4, pytest-6.2.5, py-1.10.0, pluggy-1.0.0\n", "Users/veit\n", "plugins: anyio-3.3.1\n", "collected 4218 items / 16 skipped / 4202 selected \u001b[0m\u001b[1m\u001b[1m\u001b[1m\u001b[1m\u001b[1m\u001b[1m\u001b[1m\u001b[1m\n", "…\n", "\u001b[33m=============================== warnings summary ===============================\u001b[0m\n", "…\n", "-- Docs: https://docs.pytest.org/en/stable/warnings.html\n", "\u001b[33m==== \u001b[32m4013 passed\u001b[0m, \u001b[33m\u001b[1m207 skipped\u001b[0m, \u001b[33m\u001b[1m14 xfailed\u001b[0m, \u001b[33m\u001b[1m22 warnings\u001b[0m\u001b[33m in 357.82s (0:05:57)\u001b[0m\u001b[33m ====\u001b[0m\n" ] } ], "source": [ "!pytest /Users/veit/.local/share/virtualenvs/python-311-6zxVKbDJ/lib/python3.11/site-packages/dask/tests /Users/veit/.local/share/virtualenvs/python-311-6zxVKbDJ/lib/python3.11/site-packages/dask/array/tests" ] }, { "cell_type": "markdown", "id": "7d944110", "metadata": {}, "source": [ "## Vertraute Bedienung" ] }, { "cell_type": "markdown", "id": "5acd42b5", "metadata": {}, "source": [ "### Dask DataFrame\n", "\n", "… imitiert Pandas" ] }, { "cell_type": "code", "execution_count": 2, "id": "6a83265c", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "\n", "df = pd.read_csv(\"2021-09-01.csv\")\n", "df.groupby(df.user_id).value.mean()" ] }, { "cell_type": "code", "execution_count": 3, "id": "ebefec46", "metadata": {}, "outputs": [], "source": [ "import dask.dataframe as dd\n", "\n", "\n", "dd = pd.read_csv(\"2021-09-01.csv\")\n", "dd.groupby(dd.user_id).value.mean()" ] }, { "cell_type": "markdown", "id": "c904e314", "metadata": {}, "source": [ "