<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://blog.dask.org</id>
  <title>Dask Working Notes - Posts by Tom Augspurger</title>
  <updated>2026-03-05T15:05:21.039368+00:00</updated>
  <link href="https://blog.dask.org"/>
  <link href="https://blog.dask.org/blog/author/tom-augspurger/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://blog.dask.org/2020/09/22/user_survey/</id>
    <title>2020 Dask User Survey</title>
    <updated>2020-09-22T00:00:00+00:00</updated>
    <author>
      <name>Tom Augspurger</name>
    </author>
    <content type="html">&lt;style type="text/css"&gt;
table td {
    background: none;
}

table tr.even td {
    background: none;
}

table {
    text-shadow: none;
}

table tr:hover td {
    background: none;
}

&lt;/style&gt;
&lt;p&gt;This post presents the results of the 2020 Dask User Survey,
which ran earlier this summer. Thanks to everyone who took the time to fill out the survey!
These results help us better understand the Dask community and will guide future development efforts.&lt;/p&gt;
&lt;p&gt;The raw data, as well as the start of an analysis, can be found in this binder:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://mybinder.org/v2/gh/dask/dask-examples/main?urlpath=%2Ftree%2Fsurveys%2F2020.ipynb"&gt;&lt;img alt="Binder" src="https://mybinder.org/badge_logo.svg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let us know if you find anything in the data.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 38)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="highlights"&gt;

&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;We had 240 responses to the survey (slightly fewer than last year, which had about 260).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overall, results look mostly similar to last year’s.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Our documentation has probably improved relative to last year&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Respondents care more about performance relative to last year.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 45)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="new-questions"&gt;
&lt;h1&gt;New Questions&lt;/h1&gt;
&lt;p&gt;Most of the questions are the same as in 2019. We added a couple questions about deployment and dashboard usage. Let’s look at those first.&lt;/p&gt;
&lt;p&gt;Among respondents who use a Dask package to deploy a cluster (about 53% of respondents), there’s a wide spread of methods.&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_3_0.png"&gt;
&lt;p&gt;Most people access the dashboard through a web browser. Those not using the dashboard are likely (hopefully) just using Dask on a single machine with the threaded scheduler (though the dashboard works fine on a single machine as well).&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_5_0.png"&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 57)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="learning-resources"&gt;
&lt;h1&gt;Learning Resources&lt;/h1&gt;
&lt;p&gt;Respondents’ learning material usage is farily similar to last year. The most notable differences are from
our survey form providing more options (our &lt;a class="reference external" href="https://www.youtube.com/channel/UCj9eavqmvwaCyKhIlu2GaoA"&gt;YouTube channel&lt;/a&gt; and “Gitter chat”). Other than that, &lt;a class="reference external" href="https://examples.dask.org"&gt;examples.dask.org&lt;/a&gt; might be relatively more popular.&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_7_0.png"&gt;
&lt;p&gt;Just like last year, we’ll look at resource usage grouped by how often they use Dask.&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_10_0.png"&gt;
&lt;p&gt;A few observations&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;GitHub issues are becoming relatively less popular, which perhaps reflects better documentation or stability (assuming people go to the issue tracker when they can’t find the answer in the docs or they hit a bug).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://examples.dask.org"&gt;https://examples.dask.org&lt;/a&gt; is notably now more popular among occasinal users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In response to last year’s survey, we invested time in making &lt;a class="reference external" href="https://tutorial.dask.org"&gt;https://tutorial.dask.org&lt;/a&gt; better, which we previously felt was lacking. Its usage is still about the same as last year’s (pretty popular), so it’s unclear whether we should dedicate additional focus there.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 74)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="how-do-you-use-dask"&gt;
&lt;h1&gt;How do you use Dask?&lt;/h1&gt;
&lt;p&gt;API usage remains about the same as last year (recall that about 20 fewer people took the survey and people can select multiple, so relative differences are most interesting). We added new choices for RAPIDS, Prefect, and XGBoost, each of which are somewhat popular (in the neighborhood of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.Bag&lt;/span&gt;&lt;/code&gt;).&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_12_0.png"&gt;
&lt;p&gt;About 65% of our users are using Dask on a cluster at least some of the time, which is similar to last year.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 82)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="how-can-dask-improve"&gt;
&lt;h1&gt;How can Dask improve?&lt;/h1&gt;
&lt;p&gt;Respondents continue to say that more documentation and examples would be the most valuable improvements to the project.&lt;/p&gt;
&lt;p&gt;One interesting change comes from looking at “Which would help you most right now?” split by API group (&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.array&lt;/span&gt;&lt;/code&gt;, etc.). Last year showed that “More examples” in my field was the most important for all API groups (first table below). But in 2020 there are some differences (second table below).&lt;/p&gt;
&lt;style  type="text/css" &gt;
    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col1 {
            background-color:  #cacee5;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col3 {
            background-color:  #f1ebf4;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col4 {
            background-color:  #c4cbe3;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col1 {
            background-color:  #3b92c1;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col3 {
            background-color:  #62a2cb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col4 {
            background-color:  #bdc8e1;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col1 {
            background-color:  #c2cbe2;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col3 {
            background-color:  #94b6d7;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col4 {
            background-color:  #e0dded;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col1 {
            background-color:  #e6e2ef;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col3 {
            background-color:  #ced0e6;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col4 {
            background-color:  #c5cce3;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col0 {
            background-color:  #dedcec;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col3 {
            background-color:  #1c7fb8;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col4 {
            background-color:  #73a9cf;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col1 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col3 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col4 {
            background-color:  #eee9f3;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col0 {
            background-color:  #faf2f8;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col1 {
            background-color:  #e7e3f0;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col3 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col4 {
            background-color:  #f4eef6;
            color:  #000000;
        }&lt;/style&gt;&lt;table id="T_0a8701b8_e96b_11ea_9e95_186590cd1c87" &gt;&lt;caption&gt;2019 normalized by row. Darker means that a higher proporiton of users of that API prefer that priority.&lt;/caption&gt;&lt;thead&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Which would help you most right now?&lt;/th&gt;        &lt;th class="col_heading level0 col0" &gt;Bug fixes&lt;/th&gt;        &lt;th class="col_heading level0 col1" &gt;More documentation&lt;/th&gt;        &lt;th class="col_heading level0 col2" &gt;More examples in my field&lt;/th&gt;        &lt;th class="col_heading level0 col3" &gt;New features&lt;/th&gt;        &lt;th class="col_heading level0 col4" &gt;Performance improvements&lt;/th&gt;    &lt;/tr&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Dask APIs&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;    &lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;            &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row0&amp;quot; class=&amp;quot;row_heading level0 row0&amp;quot; &amp;gt;Array&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col0&amp;quot; class=&amp;quot;data row0 col0&amp;quot; &amp;gt;10&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col1&amp;quot; class=&amp;quot;data row0 col1&amp;quot; &amp;gt;24&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col2&amp;quot; class=&amp;quot;data row0 col2&amp;quot; &amp;gt;62&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col3&amp;quot; class=&amp;quot;data row0 col3&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row0_col4&amp;quot; class=&amp;quot;data row0 col4&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row1&amp;quot; class=&amp;quot;row_heading level0 row1&amp;quot; &amp;gt;Bag&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col0&amp;quot; class=&amp;quot;data row1 col0&amp;quot; &amp;gt;3&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col1&amp;quot; class=&amp;quot;data row1 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col2&amp;quot; class=&amp;quot;data row1 col2&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col3&amp;quot; class=&amp;quot;data row1 col3&amp;quot; &amp;gt;10&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row1_col4&amp;quot; class=&amp;quot;data row1 col4&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row2&amp;quot; class=&amp;quot;row_heading level0 row2&amp;quot; &amp;gt;DataFrame&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col0&amp;quot; class=&amp;quot;data row2 col0&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col1&amp;quot; class=&amp;quot;data row2 col1&amp;quot; &amp;gt;32&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col2&amp;quot; class=&amp;quot;data row2 col2&amp;quot; &amp;gt;71&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col3&amp;quot; class=&amp;quot;data row2 col3&amp;quot; &amp;gt;39&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row2_col4&amp;quot; class=&amp;quot;data row2 col4&amp;quot; &amp;gt;26&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row3&amp;quot; class=&amp;quot;row_heading level0 row3&amp;quot; &amp;gt;Delayed&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col0&amp;quot; class=&amp;quot;data row3 col0&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col1&amp;quot; class=&amp;quot;data row3 col1&amp;quot; &amp;gt;22&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col2&amp;quot; class=&amp;quot;data row3 col2&amp;quot; &amp;gt;55&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col3&amp;quot; class=&amp;quot;data row3 col3&amp;quot; &amp;gt;26&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row3_col4&amp;quot; class=&amp;quot;data row3 col4&amp;quot; &amp;gt;27&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row4&amp;quot; class=&amp;quot;row_heading level0 row4&amp;quot; &amp;gt;Futures&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col0&amp;quot; class=&amp;quot;data row4 col0&amp;quot; &amp;gt;12&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col1&amp;quot; class=&amp;quot;data row4 col1&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col2&amp;quot; class=&amp;quot;data row4 col2&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col3&amp;quot; class=&amp;quot;data row4 col3&amp;quot; &amp;gt;20&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row4_col4&amp;quot; class=&amp;quot;data row4 col4&amp;quot; &amp;gt;17&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row5&amp;quot; class=&amp;quot;row_heading level0 row5&amp;quot; &amp;gt;ML&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col0&amp;quot; class=&amp;quot;data row5 col0&amp;quot; &amp;gt;5&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col1&amp;quot; class=&amp;quot;data row5 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col2&amp;quot; class=&amp;quot;data row5 col2&amp;quot; &amp;gt;23&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col3&amp;quot; class=&amp;quot;data row5 col3&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row5_col4&amp;quot; class=&amp;quot;data row5 col4&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87level0_row6&amp;quot; class=&amp;quot;row_heading level0 row6&amp;quot; &amp;gt;Xarray&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col0&amp;quot; class=&amp;quot;data row6 col0&amp;quot; &amp;gt;8&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col1&amp;quot; class=&amp;quot;data row6 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col2&amp;quot; class=&amp;quot;data row6 col2&amp;quot; &amp;gt;34&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col3&amp;quot; class=&amp;quot;data row6 col3&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8701b8_e96b_11ea_9e95_186590cd1c87row6_col4&amp;quot; class=&amp;quot;data row6 col4&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;style  type="text/css" &gt;
    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col1 {
            background-color:  #f1ebf5;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col3 {
            background-color:  #f5eef6;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col4 {
            background-color:  #d0d1e6;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col0 {
            background-color:  #f0eaf4;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col3 {
            background-color:  #f0eaf4;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col4 {
            background-color:  #4c99c5;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col0 {
            background-color:  #f5eff6;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col3 {
            background-color:  #fcf4fa;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col4 {
            background-color:  #8eb3d5;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col1 {
            background-color:  #ebe6f2;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col3 {
            background-color:  #f5eff6;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col4 {
            background-color:  #3d93c2;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col1 {
            background-color:  #f5eef6;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col2 {
            background-color:  #0567a2;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col3 {
            background-color:  #cacee5;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col4 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col0 {
            background-color:  #ede8f3;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col3 {
            background-color:  #c1cae2;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col4 {
            background-color:  #80aed2;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col1 {
            background-color:  #f8f1f8;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col3 {
            background-color:  #c9cee4;
            color:  #000000;
        }    #T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col4 {
            background-color:  #86b0d3;
            color:  #000000;
        }&lt;/style&gt;&lt;table id="T_0a8d3eac_e96b_11ea_9e95_186590cd1c87" &gt;&lt;caption&gt;2020 normalized by row. Darker means that a higher proporiton of users of that API prefer that priority.&lt;/caption&gt;&lt;thead&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Which would help you most right now?&lt;/th&gt;        &lt;th class="col_heading level0 col0" &gt;Bug fixes&lt;/th&gt;        &lt;th class="col_heading level0 col1" &gt;More documentation&lt;/th&gt;        &lt;th class="col_heading level0 col2" &gt;More examples in my field&lt;/th&gt;        &lt;th class="col_heading level0 col3" &gt;New features&lt;/th&gt;        &lt;th class="col_heading level0 col4" &gt;Performance improvements&lt;/th&gt;    &lt;/tr&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Dask APIs&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;    &lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;            &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row0&amp;quot; class=&amp;quot;row_heading level0 row0&amp;quot; &amp;gt;Array&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col0&amp;quot; class=&amp;quot;data row0 col0&amp;quot; &amp;gt;12&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col1&amp;quot; class=&amp;quot;data row0 col1&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col2&amp;quot; class=&amp;quot;data row0 col2&amp;quot; &amp;gt;56&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col3&amp;quot; class=&amp;quot;data row0 col3&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row0_col4&amp;quot; class=&amp;quot;data row0 col4&amp;quot; &amp;gt;23&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row1&amp;quot; class=&amp;quot;row_heading level0 row1&amp;quot; &amp;gt;Bag&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col0&amp;quot; class=&amp;quot;data row1 col0&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col1&amp;quot; class=&amp;quot;data row1 col1&amp;quot; &amp;gt;5&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col2&amp;quot; class=&amp;quot;data row1 col2&amp;quot; &amp;gt;24&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col3&amp;quot; class=&amp;quot;data row1 col3&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row1_col4&amp;quot; class=&amp;quot;data row1 col4&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row2&amp;quot; class=&amp;quot;row_heading level0 row2&amp;quot; &amp;gt;DataFrame&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col0&amp;quot; class=&amp;quot;data row2 col0&amp;quot; &amp;gt;24&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col1&amp;quot; class=&amp;quot;data row2 col1&amp;quot; &amp;gt;21&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col2&amp;quot; class=&amp;quot;data row2 col2&amp;quot; &amp;gt;67&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col3&amp;quot; class=&amp;quot;data row2 col3&amp;quot; &amp;gt;22&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row2_col4&amp;quot; class=&amp;quot;data row2 col4&amp;quot; &amp;gt;41&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row3&amp;quot; class=&amp;quot;row_heading level0 row3&amp;quot; &amp;gt;Delayed&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col0&amp;quot; class=&amp;quot;data row3 col0&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col1&amp;quot; class=&amp;quot;data row3 col1&amp;quot; &amp;gt;19&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col2&amp;quot; class=&amp;quot;data row3 col2&amp;quot; &amp;gt;46&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col3&amp;quot; class=&amp;quot;data row3 col3&amp;quot; &amp;gt;17&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row3_col4&amp;quot; class=&amp;quot;data row3 col4&amp;quot; &amp;gt;34&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row4&amp;quot; class=&amp;quot;row_heading level0 row4&amp;quot; &amp;gt;Futures&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col0&amp;quot; class=&amp;quot;data row4 col0&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col1&amp;quot; class=&amp;quot;data row4 col1&amp;quot; &amp;gt;10&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col2&amp;quot; class=&amp;quot;data row4 col2&amp;quot; &amp;gt;21&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col3&amp;quot; class=&amp;quot;data row4 col3&amp;quot; &amp;gt;13&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row4_col4&amp;quot; class=&amp;quot;data row4 col4&amp;quot; &amp;gt;24&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row5&amp;quot; class=&amp;quot;row_heading level0 row5&amp;quot; &amp;gt;ML&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col0&amp;quot; class=&amp;quot;data row5 col0&amp;quot; &amp;gt;6&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col1&amp;quot; class=&amp;quot;data row5 col1&amp;quot; &amp;gt;4&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col2&amp;quot; class=&amp;quot;data row5 col2&amp;quot; &amp;gt;21&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col3&amp;quot; class=&amp;quot;data row5 col3&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row5_col4&amp;quot; class=&amp;quot;data row5 col4&amp;quot; &amp;gt;12&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87level0_row6&amp;quot; class=&amp;quot;row_heading level0 row6&amp;quot; &amp;gt;Xarray&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col0&amp;quot; class=&amp;quot;data row6 col0&amp;quot; &amp;gt;3&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col1&amp;quot; class=&amp;quot;data row6 col1&amp;quot; &amp;gt;4&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col2&amp;quot; class=&amp;quot;data row6 col2&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col3&amp;quot; class=&amp;quot;data row6 col3&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_0a8d3eac_e96b_11ea_9e95_186590cd1c87row6_col4&amp;quot; class=&amp;quot;data row6 col4&amp;quot; &amp;gt;13&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Examples are again the most important (for all API groups except &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Futures&lt;/span&gt;&lt;/code&gt;). But “Performance improvements” is now the second-most important improvement (except for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;Futures&lt;/span&gt;&lt;/code&gt; where it’s most important). How should we interpret this? A charitable interpretation is that Dask’s users are scaling to larger problems and are running into new scaling challenges. A less charitable interpretation is that our user’s workflows are the same but Dask is getting slower!&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 422)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="what-other-systems-do-you-use"&gt;
&lt;h1&gt;What other systems do you use?&lt;/h1&gt;
&lt;p&gt;SSH continues to be the most popular “cluster resource mananger”. This was the big surprise last year, so we put in some work to make it nicer. Aside from that, not much has changed.&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_25_0.png"&gt;
&lt;p&gt;And Dask users are about as happy with its stability as last year.&lt;/p&gt;
&lt;img src="/images/2020_survey/2020_27_0.png"&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/09/22/user_survey.md&lt;/span&gt;, line 432)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="takeaways"&gt;
&lt;h1&gt;Takeaways&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Overall, most things are similar to last year.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Documentation, especially domain-specific examples, continues to be important. That said, our documentation is probably better than it was last year.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;More users are pushing Dask further. Investing in performance is likely to be valuable.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks again to all the respondents!&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.dask.org/2020/09/22/user_survey/"/>
    <summary>This post presents the results of the 2020 Dask User Survey,
which ran earlier this summer. Thanks to everyone who took the time to fill out the survey!
These results help us better understand the Dask community and will guide future development efforts.</summary>
    <category term="UserSurvey" label="User Survey"/>
    <published>2020-09-22T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://blog.dask.org/2020/08/31/helm_daskhub/</id>
    <title>Announcing the DaskHub Helm Chart</title>
    <updated>2020-08-31T00:00:00+00:00</updated>
    <author>
      <name>Tom Augspurger</name>
    </author>
    <content type="html">&lt;p&gt;Today we’re announcing the release of the
&lt;a class="reference external" href="https://github.com/dask/helm-chart/blob/master/daskhub/README.md"&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;daskhub&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;
helm chart. This is a &lt;a class="reference external" href="https://helm.sh/"&gt;Helm&lt;/a&gt; chart to easily install
&lt;a class="reference external" href="https://jupyter.org/hub"&gt;JupyterHub&lt;/a&gt; and Dask for multiple users on a
Kubernetes Cluster. If you’re managing deployment for many people that needs
interactive, scalable computing (say for a class of students, a data science
team, or a research lab) then &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask/daskhub&lt;/span&gt;&lt;/code&gt; might be right for you.&lt;/p&gt;
&lt;p&gt;You can install &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask/daskhub&lt;/span&gt;&lt;/code&gt; on a Kubernetes cluster today with&lt;/p&gt;
&lt;div class="highlight-console notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="go"&gt;helm repo add dask https://helm.dask.org/&lt;/span&gt;
&lt;span class="go"&gt;helm repo update&lt;/span&gt;
&lt;span class="go"&gt;helm upgrade --install dhub dask/daskhub&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/08/31/helm_daskhub.md&lt;/span&gt;, line 26)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="history"&gt;

&lt;p&gt;The &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask/daskhub&lt;/span&gt;&lt;/code&gt; helm chart is an evolution of the &lt;a class="reference external" href="http://pangeo.io/"&gt;Pangeo&lt;/a&gt;
helm chart, which came out of that community’s attempts to do big data
geoscience on the cloud. We’re very grateful to have years of experience using
Dask and JupyterHub together. Pangeo was always aware that there wasn’t anything
geoscience-specific to their Helm chart and so were eager to contribute it to
Dask to share the maintenance burden. In the process of moving it over to Dask’s
chart repository we took the opportunity to clean up a few rough edges.&lt;/p&gt;
&lt;p&gt;It’s interesting to read the &lt;a class="reference external" href="https://blog.dask.org/2018/01/22/pangeo-2"&gt;original
announcement&lt;/a&gt; of Pangeo’s JupyterHub
deployment. A lot has improved, and we hope that this helm chart assists more
groups in deploying JupyterHubs capable of scalable computations with Dask.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2020/08/31/helm_daskhub.md&lt;/span&gt;, line 41)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="details"&gt;
&lt;h1&gt;Details&lt;/h1&gt;
&lt;p&gt;Internally, the DaskHub helm chart is relatively simple combination of the
&lt;a class="reference external" href="https://github.com/jupyterhub/zero-to-jupyterhub-k8s"&gt;JupyterHub&lt;/a&gt; and &lt;a class="reference external" href="https://github.com/dask/dask-gateway/"&gt;Dask
Gateway&lt;/a&gt; helm charts. The only additional
magic is some configuration to&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Register Dask Gateway as a &lt;a class="reference external" href="https://jupyterhub.readthedocs.io/en/stable/reference/services.html"&gt;JupyterHub
service&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set environment variables to make using Dask Gateway easy for your users.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With the default configuration, your users will be able to create and connect to
Dask Clusters, including their dashboards, with a simple&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dask_gateway&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GatewayCluster&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;cluster&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GatewayCluster&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cluster&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Check out the
&lt;a class="reference external" href="https://docs.dask.org/en/latest/setup/kubernetes-helm.html"&gt;documentation&lt;/a&gt; for
details and let us know if you run into any difficulties.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.dask.org/2020/08/31/helm_daskhub/"/>
    <summary>Today we’re announcing the release of the
daskhub
helm chart. This is a Helm chart to easily install
JupyterHub and Dask for multiple users on a
Kubernetes Cluster. If you’re managing deployment for many people that needs
interactive, scalable computing (say for a class of students, a data science
team, or a research lab) then dask/daskhub might be right for you.</summary>
    <category term="DaskGateway" label="Dask Gateway"/>
    <category term="Deployment" label="Deployment"/>
    <category term="Helm" label="Helm"/>
    <published>2020-08-31T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://blog.dask.org/2019/08/05/user-survey/</id>
    <title>2019 Dask User Survey</title>
    <updated>2019-08-05T00:00:00+00:00</updated>
    <author>
      <name>Tom Augspurger</name>
    </author>
    <content type="html">&lt;style type="text/css"&gt;
table td {
    background: none;
}

table tr.even td {
    background: none;
}

table {
    text-shadow: none;
}

&lt;/style&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 25)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="dask-user-survey-results"&gt;

&lt;p&gt;This notebook presents the results of the 2019 Dask User Survey,
which ran earlier this summer. Thanks to everyone who took the time to fill out the survey!
These results help us better understand the Dask community and will guide future development efforts.&lt;/p&gt;
&lt;p&gt;The raw data, as well as the start of an analysis, can be found in this binder:&lt;/p&gt;
&lt;p&gt;&lt;a class="reference external" href="https://mybinder.org/v2/gh/dask/dask-examples/main?urlpath=%2Ftree%2Fsurveys%2F2019.ipynb"&gt;&lt;img alt="Binder" src="https://mybinder.org/badge_logo.svg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let us know if you find anything in the data.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 37)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="highlights"&gt;
&lt;h1&gt;Highlights&lt;/h1&gt;
&lt;p&gt;We had 259 responses to the survey. Overall, we found that the survey respondents really care about improved documentation, and ease of use (including ease of deployment), and scaling. While Dask brings together many different communities (big arrays versus big dataframes, traditional HPC users versus cloud-native resource managers), there was general agreement in what is most important for Dask.&lt;/p&gt;
&lt;p&gt;Now we’ll go through some individual items questions, highlighting particularly interesting results.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 43)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="how-do-you-use-dask"&gt;
&lt;h1&gt;How do you use Dask?&lt;/h1&gt;
&lt;p&gt;For learning resources, almost every respondent uses the documentation.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_4_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;Most respondents use Dask at least occasionally. Fortunately we had a decent number of respondents who are just looking into Dask, yet still spent the time to take the survey.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_6_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;I’m curiuos about how learning resource usage changes as users become more experienced. We might expect those just looking into Dask to start with &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;examples.dask.org&lt;/span&gt;&lt;/code&gt;, where they can try out Dask without installing anything.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_8_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;Overall, documentation is still the leader across user user groups.&lt;/p&gt;
&lt;p&gt;The usage of the &lt;a class="reference external" href="https://github.com/dask/dask-tutorial"&gt;Dask tutorial&lt;/a&gt; and the &lt;a class="reference internal" href="#examples.dask.org"&gt;&lt;span class="xref myst"&gt;dask examples&lt;/span&gt;&lt;/a&gt; are relatively consistent across groups. The primary difference between regular and new users is that regular users are more likely to engage on GitHub.&lt;/p&gt;
&lt;p&gt;From StackOverflow questions and GitHub issues, we have a vague idea about which parts of the library are used.
The survey shows that (for our respondents at least) DataFrame and Delayed are the most commonly used APIs.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_10_0.svg" /&gt;&lt;/p&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;About 65.49% of our respondests are using Dask on a Cluster.
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But the majority of respondents &lt;em&gt;also&lt;/em&gt; use Dask on their laptop.
This highlights the importance of Dask scaling down, either for
prototyping with a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LocalCluster&lt;/span&gt;&lt;/code&gt;, or for out-of-core analysis
using &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;LocalCluster&lt;/span&gt;&lt;/code&gt; or one of the single-machine schedulers.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_13_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;Most respondents use Dask interactively, at least some of the time.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_15_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;Most repondents thought that more documentation and examples would be the most valuable improvements to the project. This is especially pronounced among new users. But even among those using Dask everyday more people thought that “More examples” is more valuable than “New features” or “Performance improvements”.&lt;/p&gt;
&lt;style  type="text/css" &gt;
    #T_820ef326_b488_11e9_ad41_186590cd1c87row0_col0 {
            background-color:  #3b92c1;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row0_col1 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row0_col2 {
            background-color:  #dad9ea;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row0_col3 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row0_col4 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row1_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row1_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row1_col2 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row1_col3 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row1_col4 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row2_col0 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row2_col1 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row2_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row2_col3 {
            background-color:  #1b7eb7;
            color:  #000000;
        }    #T_820ef326_b488_11e9_ad41_186590cd1c87row2_col4 {
            background-color:  #589ec8;
            color:  #000000;
        }&lt;/style&gt;&lt;table id="T_820ef326_b488_11e9_ad41_186590cd1c87" &gt;&lt;caption&gt;Normalized by row. Darker means that a higher proporiton of users with that usage frequency prefer that priority.&lt;/caption&gt;&lt;thead&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Which would help you most right now?&lt;/th&gt;        &lt;th class="col_heading level0 col0" &gt;Bug fixes&lt;/th&gt;        &lt;th class="col_heading level0 col1" &gt;More documentation&lt;/th&gt;        &lt;th class="col_heading level0 col2" &gt;More examples in my field&lt;/th&gt;        &lt;th class="col_heading level0 col3" &gt;New features&lt;/th&gt;        &lt;th class="col_heading level0 col4" &gt;Performance improvements&lt;/th&gt;    &lt;/tr&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;How often do you use Dask?&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;    &lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;            &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87level0_row0&amp;quot; class=&amp;quot;row_heading level0 row0&amp;quot; &amp;gt;Every day&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row0_col0&amp;quot; class=&amp;quot;data row0 col0&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row0_col1&amp;quot; class=&amp;quot;data row0 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row0_col2&amp;quot; class=&amp;quot;data row0 col2&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row0_col3&amp;quot; class=&amp;quot;data row0 col3&amp;quot; &amp;gt;22&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row0_col4&amp;quot; class=&amp;quot;data row0 col4&amp;quot; &amp;gt;23&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87level0_row1&amp;quot; class=&amp;quot;row_heading level0 row1&amp;quot; &amp;gt;Just looking for now&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row1_col0&amp;quot; class=&amp;quot;data row1 col0&amp;quot; &amp;gt;1&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row1_col1&amp;quot; class=&amp;quot;data row1 col1&amp;quot; &amp;gt;3&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row1_col2&amp;quot; class=&amp;quot;data row1 col2&amp;quot; &amp;gt;18&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row1_col3&amp;quot; class=&amp;quot;data row1 col3&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row1_col4&amp;quot; class=&amp;quot;data row1 col4&amp;quot; &amp;gt;5&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87level0_row2&amp;quot; class=&amp;quot;row_heading level0 row2&amp;quot; &amp;gt;Occasionally&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row2_col0&amp;quot; class=&amp;quot;data row2 col0&amp;quot; &amp;gt;14&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row2_col1&amp;quot; class=&amp;quot;data row2 col1&amp;quot; &amp;gt;27&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row2_col2&amp;quot; class=&amp;quot;data row2 col2&amp;quot; &amp;gt;52&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row2_col3&amp;quot; class=&amp;quot;data row2 col3&amp;quot; &amp;gt;18&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_820ef326_b488_11e9_ad41_186590cd1c87row2_col4&amp;quot; class=&amp;quot;data row2 col4&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Perhaps users of certain dask APIs feel differenlty from the group as a whole? We perform a similar analysis grouped by API use, rather than frequency of use.&lt;/p&gt;
&lt;style  type="text/css" &gt;
    #T_821479f4_b488_11e9_ad41_186590cd1c87row0_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row0_col1 {
            background-color:  #cacee5;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row0_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row0_col3 {
            background-color:  #f1ebf4;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row0_col4 {
            background-color:  #c4cbe3;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row1_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row1_col1 {
            background-color:  #3b92c1;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row1_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row1_col3 {
            background-color:  #62a2cb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row1_col4 {
            background-color:  #bdc8e1;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row2_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row2_col1 {
            background-color:  #c2cbe2;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row2_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row2_col3 {
            background-color:  #94b6d7;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row2_col4 {
            background-color:  #e0dded;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row3_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row3_col1 {
            background-color:  #e6e2ef;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row3_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row3_col3 {
            background-color:  #ced0e6;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row3_col4 {
            background-color:  #c5cce3;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row4_col0 {
            background-color:  #dedcec;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row4_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row4_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row4_col3 {
            background-color:  #1c7fb8;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row4_col4 {
            background-color:  #73a9cf;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row5_col0 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row5_col1 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row5_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row5_col3 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row5_col4 {
            background-color:  #eee9f3;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row6_col0 {
            background-color:  #faf2f8;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row6_col1 {
            background-color:  #e7e3f0;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row6_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row6_col3 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_821479f4_b488_11e9_ad41_186590cd1c87row6_col4 {
            background-color:  #f4eef6;
            color:  #000000;
        }&lt;/style&gt;&lt;table id="T_821479f4_b488_11e9_ad41_186590cd1c87" &gt;&lt;caption&gt;Normalized by row. Darker means that a higher proporiton of users of that API prefer that priority.&lt;/caption&gt;&lt;thead&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Which would help you most right now?&lt;/th&gt;        &lt;th class="col_heading level0 col0" &gt;Bug fixes&lt;/th&gt;        &lt;th class="col_heading level0 col1" &gt;More documentation&lt;/th&gt;        &lt;th class="col_heading level0 col2" &gt;More examples in my field&lt;/th&gt;        &lt;th class="col_heading level0 col3" &gt;New features&lt;/th&gt;        &lt;th class="col_heading level0 col4" &gt;Performance improvements&lt;/th&gt;    &lt;/tr&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Dask APIs&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;    &lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;            &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row0&amp;quot; class=&amp;quot;row_heading level0 row0&amp;quot; &amp;gt;Array&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row0_col0&amp;quot; class=&amp;quot;data row0 col0&amp;quot; &amp;gt;10&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row0_col1&amp;quot; class=&amp;quot;data row0 col1&amp;quot; &amp;gt;24&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row0_col2&amp;quot; class=&amp;quot;data row0 col2&amp;quot; &amp;gt;62&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row0_col3&amp;quot; class=&amp;quot;data row0 col3&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row0_col4&amp;quot; class=&amp;quot;data row0 col4&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row1&amp;quot; class=&amp;quot;row_heading level0 row1&amp;quot; &amp;gt;Bag&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row1_col0&amp;quot; class=&amp;quot;data row1 col0&amp;quot; &amp;gt;3&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row1_col1&amp;quot; class=&amp;quot;data row1 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row1_col2&amp;quot; class=&amp;quot;data row1 col2&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row1_col3&amp;quot; class=&amp;quot;data row1 col3&amp;quot; &amp;gt;10&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row1_col4&amp;quot; class=&amp;quot;data row1 col4&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row2&amp;quot; class=&amp;quot;row_heading level0 row2&amp;quot; &amp;gt;DataFrame&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row2_col0&amp;quot; class=&amp;quot;data row2 col0&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row2_col1&amp;quot; class=&amp;quot;data row2 col1&amp;quot; &amp;gt;32&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row2_col2&amp;quot; class=&amp;quot;data row2 col2&amp;quot; &amp;gt;71&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row2_col3&amp;quot; class=&amp;quot;data row2 col3&amp;quot; &amp;gt;39&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row2_col4&amp;quot; class=&amp;quot;data row2 col4&amp;quot; &amp;gt;26&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row3&amp;quot; class=&amp;quot;row_heading level0 row3&amp;quot; &amp;gt;Delayed&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row3_col0&amp;quot; class=&amp;quot;data row3 col0&amp;quot; &amp;gt;16&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row3_col1&amp;quot; class=&amp;quot;data row3 col1&amp;quot; &amp;gt;22&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row3_col2&amp;quot; class=&amp;quot;data row3 col2&amp;quot; &amp;gt;55&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row3_col3&amp;quot; class=&amp;quot;data row3 col3&amp;quot; &amp;gt;26&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row3_col4&amp;quot; class=&amp;quot;data row3 col4&amp;quot; &amp;gt;27&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row4&amp;quot; class=&amp;quot;row_heading level0 row4&amp;quot; &amp;gt;Futures&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row4_col0&amp;quot; class=&amp;quot;data row4 col0&amp;quot; &amp;gt;12&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row4_col1&amp;quot; class=&amp;quot;data row4 col1&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row4_col2&amp;quot; class=&amp;quot;data row4 col2&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row4_col3&amp;quot; class=&amp;quot;data row4 col3&amp;quot; &amp;gt;20&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row4_col4&amp;quot; class=&amp;quot;data row4 col4&amp;quot; &amp;gt;17&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row5&amp;quot; class=&amp;quot;row_heading level0 row5&amp;quot; &amp;gt;ML&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row5_col0&amp;quot; class=&amp;quot;data row5 col0&amp;quot; &amp;gt;5&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row5_col1&amp;quot; class=&amp;quot;data row5 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row5_col2&amp;quot; class=&amp;quot;data row5 col2&amp;quot; &amp;gt;23&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row5_col3&amp;quot; class=&amp;quot;data row5 col3&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row5_col4&amp;quot; class=&amp;quot;data row5 col4&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87level0_row6&amp;quot; class=&amp;quot;row_heading level0 row6&amp;quot; &amp;gt;Xarray&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row6_col0&amp;quot; class=&amp;quot;data row6 col0&amp;quot; &amp;gt;8&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row6_col1&amp;quot; class=&amp;quot;data row6 col1&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row6_col2&amp;quot; class=&amp;quot;data row6 col2&amp;quot; &amp;gt;34&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row6_col3&amp;quot; class=&amp;quot;data row6 col3&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_821479f4_b488_11e9_ad41_186590cd1c87row6_col4&amp;quot; class=&amp;quot;data row6 col4&amp;quot; &amp;gt;9&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nothing really stands out. The “futures” users (who we expect to be relatively advanced) may prioritize features and performance over documentation. But everyone agrees that more examples are the highest priority.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 325)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="common-feature-requests"&gt;
&lt;h1&gt;Common Feature Requests&lt;/h1&gt;
&lt;p&gt;For specific features, we made a list of things that we (as developers) thought might be important.&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_22_0.svg" /&gt;&lt;/p&gt;
&lt;p&gt;The clearest standout is how many people thought “Better NumPy/Pandas support” was “most critical”. In hindsight, it’d be good to have a followup fill-in field to undertand what each respondent meant by that. The parsimonious interpretion is “cover more of the NumPy / pandas API”.&lt;/p&gt;
&lt;p&gt;“Ease of deployment” had a high proportion of “critical to me”. Again in hindsight, I notice a bit of ambiguity. Does this mean people want Dask to be easier to deploy? Or does this mean that Dask, which they currently find easy to deploy, is critically important? Regardless, we can prioritize simplicity in deployment.&lt;/p&gt;
&lt;p&gt;Relatively few respondents care about things like “Managing many users”, though we expect that this would be relatively popular among system administartors, who are a smaller population.&lt;/p&gt;
&lt;p&gt;And of course, we have people pushing Dask to its limits for whom “Improving scaling” is critically important.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 339)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="what-other-systems-do-you-use"&gt;
&lt;h1&gt;What other systems do you use?&lt;/h1&gt;
&lt;p&gt;A relatively high proportion of respondents use Python 3 (97% compared to 84% in the most recent &lt;a class="reference external" href="https://www.jetbrains.com/research/python-developers-survey-2018/"&gt;Python Developers Survey&lt;/a&gt;).&lt;/p&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;3    97.29%
2     2.71%
Name: Python 2 or 3?, dtype: object
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We were a bit surprised to see that SSH is the most popular “cluster resource manager”.&lt;/p&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;SSH                                                       98
Kubernetes                                                73
HPC resource manager (SLURM, PBS, SGE, LSF or similar)    61
My workplace has a custom solution for this               23
I don&amp;#39;t know, someone else does this for me               16
Hadoop / Yarn / EMR                                       14
Name: If you use a cluster, how do you launch Dask? , dtype: int64
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;How does cluster-resource manager compare with API usage?&lt;/p&gt;
&lt;style  type="text/css" &gt;
    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col0 {
            background-color:  #056faf;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col3 {
            background-color:  #034e7b;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col4 {
            background-color:  #2685bb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col5 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col6 {
            background-color:  #f2ecf5;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col0 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col1 {
            background-color:  #f7f0f7;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col2 {
            background-color:  #0771b1;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col3 {
            background-color:  #0771b1;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col4 {
            background-color:  #c5cce3;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col5 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col6 {
            background-color:  #79abd0;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col0 {
            background-color:  #8bb2d4;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col1 {
            background-color:  #b4c4df;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col3 {
            background-color:  #589ec8;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col4 {
            background-color:  #eee9f3;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col5 {
            background-color:  #8bb2d4;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col6 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col0 {
            background-color:  #4c99c5;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col3 {
            background-color:  #056dac;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col4 {
            background-color:  #73a9cf;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col5 {
            background-color:  #d9d8ea;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col6 {
            background-color:  #f3edf5;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col0 {
            background-color:  #056ba9;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col1 {
            background-color:  #fff7fb;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col2 {
            background-color:  #023858;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col3 {
            background-color:  #1379b5;
            color:  #f1f1f1;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col4 {
            background-color:  #dfddec;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col5 {
            background-color:  #e8e4f0;
            color:  #000000;
        }    #T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col6 {
            background-color:  #f9f2f8;
            color:  #000000;
        }&lt;/style&gt;&lt;table id="T_8326d0f8_b488_11e9_ad41_186590cd1c87" &gt;&lt;thead&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;Dask APIs&lt;/th&gt;        &lt;th class="col_heading level0 col0" &gt;Array&lt;/th&gt;        &lt;th class="col_heading level0 col1" &gt;Bag&lt;/th&gt;        &lt;th class="col_heading level0 col2" &gt;DataFrame&lt;/th&gt;        &lt;th class="col_heading level0 col3" &gt;Delayed&lt;/th&gt;        &lt;th class="col_heading level0 col4" &gt;Futures&lt;/th&gt;        &lt;th class="col_heading level0 col5" &gt;ML&lt;/th&gt;        &lt;th class="col_heading level0 col6" &gt;Xarray&lt;/th&gt;    &lt;/tr&gt;    &lt;tr&gt;        &lt;th class="index_name level0" &gt;If you use a cluster, how do you launch Dask? &lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;        &lt;th class="blank" &gt;&lt;/th&gt;    &lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;div class="highlight-none notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;            &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87level0_row0&amp;quot; class=&amp;quot;row_heading level0 row0&amp;quot; &amp;gt;Custom&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col0&amp;quot; class=&amp;quot;data row0 col0&amp;quot; &amp;gt;15&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col1&amp;quot; class=&amp;quot;data row0 col1&amp;quot; &amp;gt;6&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col2&amp;quot; class=&amp;quot;data row0 col2&amp;quot; &amp;gt;18&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col3&amp;quot; class=&amp;quot;data row0 col3&amp;quot; &amp;gt;17&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col4&amp;quot; class=&amp;quot;data row0 col4&amp;quot; &amp;gt;14&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col5&amp;quot; class=&amp;quot;data row0 col5&amp;quot; &amp;gt;6&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row0_col6&amp;quot; class=&amp;quot;data row0 col6&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87level0_row1&amp;quot; class=&amp;quot;row_heading level0 row1&amp;quot; &amp;gt;HPC&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col0&amp;quot; class=&amp;quot;data row1 col0&amp;quot; &amp;gt;50&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col1&amp;quot; class=&amp;quot;data row1 col1&amp;quot; &amp;gt;13&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col2&amp;quot; class=&amp;quot;data row1 col2&amp;quot; &amp;gt;40&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col3&amp;quot; class=&amp;quot;data row1 col3&amp;quot; &amp;gt;40&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col4&amp;quot; class=&amp;quot;data row1 col4&amp;quot; &amp;gt;22&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col5&amp;quot; class=&amp;quot;data row1 col5&amp;quot; &amp;gt;11&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row1_col6&amp;quot; class=&amp;quot;data row1 col6&amp;quot; &amp;gt;30&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87level0_row2&amp;quot; class=&amp;quot;row_heading level0 row2&amp;quot; &amp;gt;Hadoop / Yarn / EMR&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col0&amp;quot; class=&amp;quot;data row2 col0&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col1&amp;quot; class=&amp;quot;data row2 col1&amp;quot; &amp;gt;6&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col2&amp;quot; class=&amp;quot;data row2 col2&amp;quot; &amp;gt;12&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col3&amp;quot; class=&amp;quot;data row2 col3&amp;quot; &amp;gt;8&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col4&amp;quot; class=&amp;quot;data row2 col4&amp;quot; &amp;gt;4&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col5&amp;quot; class=&amp;quot;data row2 col5&amp;quot; &amp;gt;7&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row2_col6&amp;quot; class=&amp;quot;data row2 col6&amp;quot; &amp;gt;3&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87level0_row3&amp;quot; class=&amp;quot;row_heading level0 row3&amp;quot; &amp;gt;Kubernetes&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col0&amp;quot; class=&amp;quot;data row3 col0&amp;quot; &amp;gt;40&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col1&amp;quot; class=&amp;quot;data row3 col1&amp;quot; &amp;gt;18&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col2&amp;quot; class=&amp;quot;data row3 col2&amp;quot; &amp;gt;56&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col3&amp;quot; class=&amp;quot;data row3 col3&amp;quot; &amp;gt;47&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col4&amp;quot; class=&amp;quot;data row3 col4&amp;quot; &amp;gt;37&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col5&amp;quot; class=&amp;quot;data row3 col5&amp;quot; &amp;gt;26&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row3_col6&amp;quot; class=&amp;quot;data row3 col6&amp;quot; &amp;gt;21&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
                    &amp;lt;th id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87level0_row4&amp;quot; class=&amp;quot;row_heading level0 row4&amp;quot; &amp;gt;SSH&amp;lt;/th&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col0&amp;quot; class=&amp;quot;data row4 col0&amp;quot; &amp;gt;61&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col1&amp;quot; class=&amp;quot;data row4 col1&amp;quot; &amp;gt;23&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col2&amp;quot; class=&amp;quot;data row4 col2&amp;quot; &amp;gt;72&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col3&amp;quot; class=&amp;quot;data row4 col3&amp;quot; &amp;gt;58&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col4&amp;quot; class=&amp;quot;data row4 col4&amp;quot; &amp;gt;32&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col5&amp;quot; class=&amp;quot;data row4 col5&amp;quot; &amp;gt;30&amp;lt;/td&amp;gt;
                    &amp;lt;td id=&amp;quot;T_8326d0f8_b488_11e9_ad41_186590cd1c87row4_col6&amp;quot; class=&amp;quot;data row4 col6&amp;quot; &amp;gt;25&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;HPC users are relatively heavy users of &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.array&lt;/span&gt;&lt;/code&gt; and xarray.&lt;/p&gt;
&lt;p&gt;Somewhat surprisingly, Dask’s heaviest users find dask stable enough. Perhaps they’ve pushed past the bugs and found workarounds (percentages are normalized by row).&lt;/p&gt;
&lt;p&gt;&lt;img alt="svg" src="https://blog.dask.org/_images/analyze_32_0.svg" /&gt;&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/08/05/user-survey.md&lt;/span&gt;, line 525)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="takeaways"&gt;
&lt;h1&gt;Takeaways&lt;/h1&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;We should prioritize improving and expanding our documentation and examples. This may be
accomplished by Dask maintainers seeking examples from the community. Many of the examples
on &lt;a class="reference external" href="https://examples.dask.org"&gt;https://examples.dask.org&lt;/a&gt; were developed by domain specialist who use Dask.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improved scaling to larger problems is important, but we shouldn’t
sacrifice the single-machine usecase to get there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Both interactive and batch workflows are important.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Dask’s various sub-communities are more similar than they are different.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Thanks again to all the respondents. We look forward to repeating this process to identify trends over time.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.dask.org/2019/08/05/user-survey/"/>
    <summary>Document headings start at H2, not H1 [myst.header]</summary>
    <category term="UserSurvey" label="User Survey"/>
    <published>2019-08-05T00:00:00+00:00</published>
  </entry>
  <entry>
    <id>https://blog.dask.org/2019/01/22/dask-extension-arrays/</id>
    <title>Extension Arrays in Dask DataFrame</title>
    <updated>2019-01-22T00:00:00+00:00</updated>
    <author>
      <name>Tom Augspurger</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;This work is supported by &lt;a class="reference external" href="http://anaconda.com"&gt;Anaconda Inc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/01/22/dask-extension-arrays.md&lt;/span&gt;, line 11)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="summary"&gt;

&lt;p&gt;Dask DataFrame works well with pandas’ new Extension Array interface, including
third-party extension arrays. This lets Dask&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;easily support pandas’ new extension arrays, like their new &lt;a class="reference external" href="http://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#optional-integer-na-support"&gt;nullable integer
array&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;support third-party extension array arrays, like &lt;a class="reference external" href="https://cyberpandas.readthedocs.io"&gt;cyberpandas’s&lt;/a&gt;
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IPArray&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/01/22/dask-extension-arrays.md&lt;/span&gt;, line 21)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="background"&gt;
&lt;h1&gt;Background&lt;/h1&gt;
&lt;p&gt;Pandas 0.23 introduced the &lt;a class="reference external" href="http://pandas.pydata.org/pandas-docs/version/0.24/extending.html#extension-types"&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ExtensionArray&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;, a way to store things other
than a simple NumPy array in a DataFrame or Series. Internally pandas uses this
for data types that aren’t handled natively by NumPy like datetimes with
timezones, Categorical, or (the new!) nullable integer arrays.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Series&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;date_range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2000&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;periods&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tz&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;US/Central&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;
&lt;span class="go"&gt;0   2000-01-01 00:00:00-06:00&lt;/span&gt;
&lt;span class="go"&gt;1   2000-01-02 00:00:00-06:00&lt;/span&gt;
&lt;span class="go"&gt;2   2000-01-03 00:00:00-06:00&lt;/span&gt;
&lt;span class="go"&gt;3   2000-01-04 00:00:00-06:00&lt;/span&gt;
&lt;span class="go"&gt;dtype: datetime64[ns, US/Central]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt; has always supported the extension types that pandas defines.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dask.dataframe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dd&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;npartitions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;Dask Series Structure:&lt;/span&gt;
&lt;span class="go"&gt;npartitions=2&lt;/span&gt;
&lt;span class="go"&gt;0    datetime64[ns, US/Central]&lt;/span&gt;
&lt;span class="go"&gt;2                           ...&lt;/span&gt;
&lt;span class="go"&gt;3                           ...&lt;/span&gt;
&lt;span class="go"&gt;dtype: datetime64[ns, US/Central]&lt;/span&gt;
&lt;span class="go"&gt;Dask Name: from_pandas, 2 tasks&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/01/22/dask-extension-arrays.md&lt;/span&gt;, line 52)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="the-challenge"&gt;
&lt;h1&gt;The Challenge&lt;/h1&gt;
&lt;p&gt;Newer versions of pandas allow third-party libraries to write custom extension
arrays. These arrays can be placed inside a DataFrame or Series, and work
just as well as any extension array defined within pandas itself. However,
third-party extension arrays provide a slight challenge for Dask.&lt;/p&gt;
&lt;p&gt;Recall: &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt; is lazy. We use a familiar pandas-like API to build up
a task graph, rather than executing immediately. But if Dask DataFrame is lazy,
then how do things like the following work?&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]})&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;npartitions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;
&lt;span class="go"&gt;Index([&amp;#39;B&amp;#39;], dtype=&amp;#39;object&amp;#39;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;ddf[['B']]&lt;/span&gt;&lt;/code&gt; (lazily) selects the column &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;'B'&lt;/span&gt;&lt;/code&gt; from the dataframe. But accessing
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;.columns&lt;/span&gt;&lt;/code&gt; &lt;em&gt;immediately&lt;/em&gt; returns a pandas Index object with just the selected
columns.&lt;/p&gt;
&lt;p&gt;No real computation has happened (you could just as easily swap out the
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;from_pandas&lt;/span&gt;&lt;/code&gt; for a &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dd.read_parquet&lt;/span&gt;&lt;/code&gt; on a larger-than-memory dataset, and the
behavior would be the same). Dask is able to do these kinds of “metadata-only”
computations, where the output depends only on the columns and the dtypes,
without executing the task graph. Internally, Dask does this by keeping a pair
of dummy pandas DataFrames on each Dask DataFrame.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_meta&lt;/span&gt;
&lt;span class="go"&gt;Empty DataFrame&lt;/span&gt;
&lt;span class="go"&gt;Columns: [A, B]&lt;/span&gt;
&lt;span class="go"&gt;Index: []&lt;/span&gt;

&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_meta_nonempty&lt;/span&gt;
&lt;span class="go"&gt;ddf._meta_nonempty&lt;/span&gt;
&lt;span class="go"&gt;   A  B&lt;/span&gt;
&lt;span class="go"&gt;0  1  1&lt;/span&gt;
&lt;span class="go"&gt;1  1  1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;We need the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_meta_nonempty&lt;/span&gt;&lt;/code&gt;, since some operations in pandas behave differently
on an Empty DataFrame than on a non-empty one (either by design or,
occasionally, a bug in pandas).&lt;/p&gt;
&lt;p&gt;The issue with third-party extension arrays is that Dask doesn’t know what
values to put in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_meta_nonempty&lt;/span&gt;&lt;/code&gt;. We’re quite happy to do it for each NumPy
dtype and each of pandas’ own extension dtypes. But any third-party library
could create an ExtensionArray for any type, and Dask would have no way of
knowing what’s a valid value for it.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/01/22/dask-extension-arrays.md&lt;/span&gt;, line 104)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="the-solution"&gt;
&lt;h1&gt;The Solution&lt;/h1&gt;
&lt;p&gt;Rather than Dask guessing what values to use for the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_meta_nonempty&lt;/span&gt;&lt;/code&gt;, extension
array authors (or users) can register their extension dtype with Dask. Once
registered, Dask will be able to generate the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;_meta_nonempty&lt;/span&gt;&lt;/code&gt;, and things
should work fine from there. For example, we can register the dummy &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;DecimalArray&lt;/span&gt;&lt;/code&gt;
that pandas uses for testing (this isn’t part of pandas’ public API) with Dask.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;decimal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Decimal&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;pandas.tests.extension.decimal&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DecimalArray&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;DecimalDtype&lt;/span&gt;

&lt;span class="c1"&gt;# The actual registration that would be done in the 3rd-party library&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;dask.dataframe.extensions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;make_array_nonempty&lt;/span&gt;


&lt;span class="nd"&gt;@make_array_nonempty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DecimalDtype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;DecimalArray&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_from_sequence&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;NaN&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
                                       &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now users of that extension type can place those arrays inside a Dask DataFrame
or Series.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DecimalArray&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="gp"&gt;... &lt;/span&gt;                                      &lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;3.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)])})&lt;/span&gt;

&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt;
&lt;span class="go"&gt;Dask DataFrame Structure:&lt;/span&gt;
&lt;span class="go"&gt;                     A&lt;/span&gt;
&lt;span class="go"&gt;npartitions=1&lt;/span&gt;
&lt;span class="go"&gt;0              decimal&lt;/span&gt;
&lt;span class="go"&gt;2                  ...&lt;/span&gt;
&lt;span class="go"&gt;Dask Name: from_pandas, 1 tasks&lt;/span&gt;

&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dtypes&lt;/span&gt;
&lt;span class="go"&gt;A    decimal&lt;/span&gt;
&lt;span class="go"&gt;dtype: object&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And from there, the usual operations just as they would in pandas.&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;random&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;DecimalArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;span class="gp"&gt;... &lt;/span&gt;                                              &lt;span class="n"&gt;Decimal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2.0&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)],&lt;/span&gt;
&lt;span class="gp"&gt;... &lt;/span&gt;                                             &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;span class="gp"&gt;... &lt;/span&gt;                   &lt;span class="s2"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,))})&lt;/span&gt;
&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;ddf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_pandas&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;In [35]: ddf.groupby(&amp;quot;A&amp;quot;).B.mean().compute()&lt;/span&gt;
&lt;span class="go"&gt;Out[35]:&lt;/span&gt;
&lt;span class="go"&gt;A&lt;/span&gt;
&lt;span class="go"&gt;1.0    1.50&lt;/span&gt;
&lt;span class="go"&gt;2.0    1.48&lt;/span&gt;
&lt;span class="go"&gt;Name: B, dtype: float64&lt;/span&gt;

&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2019/01/22/dask-extension-arrays.md&lt;/span&gt;, line 165)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="the-real-lesson"&gt;
&lt;h1&gt;The Real Lesson&lt;/h1&gt;
&lt;p&gt;It’s neat that Dask now supports extension arrays. But to me, the exciting thing
is just how little work this took. The
&lt;a class="reference external" href="https://github.com/dask/dask/pull/4379/files"&gt;PR&lt;/a&gt; implementing support for
third-party extension arrays is quite short, just defining the object that
third-parties register with, and using it to generate the data when dtype is
detected. Supporting the three new extension arrays in pandas 0.24.0
(&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IntegerArray&lt;/span&gt;&lt;/code&gt;, &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;PeriodArray&lt;/span&gt;&lt;/code&gt;, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;IntervalArray&lt;/span&gt;&lt;/code&gt;), takes a handful of lines
of code&lt;/p&gt;
&lt;div class="highlight-python notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="nd"&gt;@make_array_nonempty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Interval&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;IntervalArray&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;from_breaks&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;closed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;closed&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@make_array_nonempty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Period&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;period_array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2001&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="nd"&gt;@make_array_nonempty&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_IntegerDtype&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;_&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;integer_array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Dask benefits directly from improvements made to pandas. Dask didn’t have to
build out a new parallel extension array interface, and reimplement all the new
extension arrays using the parallel interface. We just re-used what pandas
already did, and it fits into the existing Dask structure.&lt;/p&gt;
&lt;p&gt;For third-party extension array authors, like &lt;a class="reference external" href="https://cyberpandas.readthedocs.io"&gt;cyberpandas&lt;/a&gt;, the
work is similarly minimal. They don’t need to re-implement everything from the
ground up, just to play well with Dask.&lt;/p&gt;
&lt;p&gt;This highlights the importance of one of the Dask project’s core values: working
with the community. If you visit &lt;a class="reference external" href="https://dask.org"&gt;dask.org&lt;/a&gt;, you’ll see
phrases like&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Integrates with existing projects&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;and&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Built with the broader community&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;At the start of Dask, the developers &lt;em&gt;could&lt;/em&gt; have gone off and re-written pandas
or NumPy from scratch to be parallel friendly (though we’d probably still be
working on that part today, since that’s such a massive undertaking). Instead,
the Dask developers worked with the community, occasionally nudging it in
directions that would help out dask. For example, many places in pandas &lt;a class="reference external" href="http://matthewrocklin.com/blog/work/2015/03/10/PyData-GIL"&gt;held
the GIL&lt;/a&gt;, preventing
thread-based parallelism. Rather than abandoning pandas, the Dask and pandas
developers worked together to release the GIL where possible when it was a
bottleneck for &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt;. This benefited Dask and anyone else trying to
do thread-based parallelism with pandas DataFrames.&lt;/p&gt;
&lt;p&gt;And now, when pandas introduces new features like nullable integers,
&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dask.dataframe&lt;/span&gt;&lt;/code&gt; just needs to register it as an extension type and immediately
benefits from it. And third-party extension array authors can do the same for
their extension arrays.&lt;/p&gt;
&lt;p&gt;If you’re writing an ExtensionArray, make sure to add it to the &lt;a class="reference external" href="http://pandas.pydata.org/pandas-docs/version/0.24/ecosystem.html#extension-data-types"&gt;pandas
ecosystem&lt;/a&gt; page, and register it with Dask!&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.dask.org/2019/01/22/dask-extension-arrays/"/>
    <summary>This work is supported by Anaconda Inc</summary>
    <category term="dask" label="dask"/>
    <category term="dataframe" label="dataframe"/>
    <published>2019-01-22T00:00:00+00:00</published>
  </entry>
</feed>
