LoginSignup
19
10

More than 3 years have passed since last update.

Koalasの概要紹介

Last updated at Posted at 2019-05-04

この記事について

Databricks社が開発したpandas likeにSparkを動作させるライブラリ、Koalasについてのメモ書きです。 ほぼ公式ドキュメントの日本語訳
koalasは更新が速いライブラリなので、2019年5月4日時点での情報であることをご留意ください。

Koalasって?

pandasとPysparkデータフレームでインタフェースが違うところ、
例えばこういうやつら↓、

  • データ結合
    • pandas -> merge
    • Pyspark -> join
  • 列選択
    • pandas -> df[["col1", "col2"]]
    • Pyspark -> df.select("col1", "col2")

を覚えるの大変だから、pandasのような操作感でSpark動かせたら良いよねっていう思想で作られたライブラリ。すでにPysparkをある程度触ってる人がkoalasに乗り換えるというより、今までpandasメインで使ってきた人が、スムーズにSparkを動かせたら良いなーとのこと。
思想としては、Daskに触発されたらしい。
Sparkは2.4以降をサポートするとのこと。古いバージョンでも動くかもしれないけど保証はしないとのこと。
(Spark 2.4ってこの前出たばっかなのにずいぶん男前だな…w)

プロジェクトとしては 鋭意開発中 で、週単位でリリースしていくよ!とのこと。

実際に使ってみる

Databricks(Databricks Runtime 5.3)上で試しに使ってみる。
koalasをインストールする。ついでにnumpyがちょっと古いよって怒られたのでバージョンを上げる。

dbutils.library.installPyPI("Koalas")
dbutils.library.installPyPI("numpy", "1.12.0")
dbutils.library.restartPython()

koalasをインポートしてみる

import databricks.koalas as ks

しかし、ここで残念ながらエラーが出てしまった。

 File "/local_disk0/pythonVirtualEnvDirs/virtualEnv-4735ad99-9fc8-4ac4-b1f9-de2e04aeb1b5/lib/python3.5/site-packages/databricks/koalas/frame.py", line 1073
    self._sdf: spark.DataFrame = kdf._sdf
             ^
SyntaxError: invalid syntax

うーーーーん。。
ちょうど今日コミットされたところだから、すぐ直るんだろうけども、。、
あとでissue上げとこう。。

2019/05/07追記: 今度こそ試してみる

@harupy様のコメントを参考に、 koalas のバージョンを0.1.0に戻して試してみた。
無事動作。
ちなみに、0.3.0は上記とは別のエラーが出てしまいまたもや動作せず・・・。
前回同様Databricks上でチャレンジ。

dbutils.library.installPyPI("Koalas","0.1.0")
dbutils.library.installPyPI("numpy", "1.12.0")
dbutils.library.restartPython()
import databricks.koalas as ks
import pandas as pd
import numpy as np

print(ks.__version__)

>>>0.1.0

バージョン0.1.0でトライ。

適当なデータフレームを作ってみる。

kdf = ks.from_pandas(pd.DataFrame({"A":[x for x in range(100)], "B":[x**2 for x in range(100)], "C":np.random.randint(0,5,100)}))
print(kdf.shape)
print(len(kdf))

上手く伝えられないのが残念ですが、このコードを実行すると、Databricksのプログレスバーが出ます。確かにSparkが動いてる。

groupbyしてみる

agg_kdf = kdf.groupby('C').agg({'B': 'max', 'A': 'sum'})
agg_kdf.toPandas()

インタフェースは完全にpandasですね。
.head() はサポートされていないようなので、DataFrameの中身を見るためには、 toPandas() がとりあえず有効です。

ちなみに、未実装のメソッドも当然ながら多く、未実装のメソッドを実行するとこんな感じのエラーが出てしまいます。

kdf.query("A == B")

ありのまま感がすごい。

PandasNotImplementedError: The method `pd.DataFrame.query()` is not implemented yet.

まとめ

絶賛開発中で不安定ではありますが、Sparkが活躍するような大規模データをpandas-likeに処理できることができました。
pandasはpythonでデータ分析を行う人であれば誰でも触るライブラリですし、koalasでもっと柔軟な処理ができるとお手軽に大規模データを扱うことができて良さそうですね。定期的に見守っていきたいと思います。

19
10
8

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
10