1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Glue(JupyterNotebook)でもPolarsは使えそう

Posted at

はじめに

近頃Pandasに代わり、Polarsが来ているそうです。

GlueではCSVやExcelなどをPandasでよく処理するので、Polarsが動くのか試してみました。
特にJuptyterNotebookのGlueを使って開発しているので、インタラクティブセッションでもジョブ実行でも使えるかを見てみました。

やったこと

コードはすべて、インタラクティブセッションで記述していきます。

デフォルトでインストールされていないことを確認

!pip3 listで確認できます。Pandasはありますが、Polarsはありません。

モジュール追加

一番最初にPolarsを読み込ませます。

# 読み込ますモジュール
%additional_python_modules polars

インタラクティブセッション用に一度セッションを閉じます。(ジョブ実行時にこのコードがあっても問題ありません。)

%stop_session

そのあとに、最初からあるセルを持ってきています

最初からあるセル(未修整)
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext.getOrCreate()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)

サンプル実行

10行の例

以下の記事の「10行で把握するPolars」を実行してみます。

インタラクティブセッションにて

image.png

image.png

問題なく動いているようです。

Run Jobから

コードは何も修正せず、Run Jobで動かしました。ログはClooudWatchに書き出されます。
image.png

同じ結果が出てきていますので、動いていることがわかります。

100本ノックから

もう少し色々動かしてみたかったので、以下の記事の1-10本目を動かしてみます。

Glueでは、データのダウンロードの方法を別にしました。どうやらOSの領域とPythonの領域が異なるようで、コマンドで/tmpに落としても、Pythonの認識する/tmpには存在しませんでした。

# 以下の方法では、Pythonからは見れない
!git clone https://github.com/The-Japan-DataScientist-Society/100knocks-preprocess

かわりにデータの読み込みを少し変更して、以下のようにread_csvで直接サーバのファイルを指定しました。

# データの読み込み
import os
import polars as pl

dtypes = {
    'customer_id': str,
    'gender_cd': str,
    'postal_cd': str,
    'application_store_cd': str,
    'status_cd': str,
    'category_major_cd': str,
    'category_medium_cd': str,
    'category_small_cd': str,
    'product_cd': str,
    'store_cd': str,
    'prefecture_cd': str,
    'tel_no': str,
    'postal_cd': str,
    'street': str,
    'application_date': str,
    'birth_day': pl.Date
}

pathRoot = "https://raw.githubusercontent.com/The-Japan-DataScientist-Society/100knocks-preprocess/master/docker/work/"

df_customer = pl.read_csv(pathRoot + "data/customer.csv", dtypes=dtypes)
df_category = pl.read_csv(pathRoot + "data/category.csv", dtypes=dtypes)
df_product = pl.read_csv(pathRoot + "data/product.csv", dtypes=dtypes)
df_receipt = pl.read_csv(pathRoot + "data/receipt.csv", dtypes=dtypes)
df_store = pl.read_csv(pathRoot + "data/store.csv", dtypes=dtypes)
df_geocode = pl.read_csv(pathRoot + "data/geocode.csv", dtypes=dtypes)

変数に格納し、それぞれのインタラクティブセッションの結果とRun Jobでの結果を実行してみました。

P001

インタラクティブセッション

image.png

Run Job

image.png

P002

インタラクティブセッション

image.png

Run Job

image.png

P003

インタラクティブセッション

image.png

Run Job

image.png

P004

インタラクティブセッション

image.png

Run Job

image.png

P005

インタラクティブセッション

image.png

Run Job

image.png

P006

インタラクティブセッション

image.png

Run Job

image.png

P007

インタラクティブセッション

image.png

Run Job

image.png

P008

インタラクティブセッション

image.png

Run Job

image.png

P009

インタラクティブセッション

image.png

Run Job

image.png

P010

インタラクティブセッション

image.png

Run Job

image.png

いずれの例でも、どちらの実行方法もエラー無く出力されました。

おわりに

Glue(JupyterNotebook)でもPolarsは使えそうなので、今後は使っていきたいと感じました。
ですがGlueの起動時間が長いので、処理する内容が軽量の場合はPandasでもPolarsでもそんなに差はないかなと思います。小さなファイルをたくさん処理する場合は使い慣れた方を用いた方がいいかもしれません。

1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?