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

DatabricksにてPySparkでデータ加工しローカルにダウンロードする手順とリファレンスの読み解き方

Posted at

●背景

業務にてDatabricksを今後使うことになった。Databricks notebookにてデータをPySparkで加工してローカルにCSVダウンロードする流れをまとめてみた。
やり方は様々かと思うが、データ加工してCSVにダウンロードする簡易的な手順の一つをまとめる。
同時に、PySparkにてデータ加工する際に参照するリファレンスの読み解き方も解説する。

●参考URL

●流れ全体像

  • Databricks UI上でnotebookを開く
  • 指定のデータをDataFrameとして読み込む
  • PySparkにてデータを加工
    • 使えるメソッドはリファレンスから調査
  • UI上でローカルダウンロード

●調べて分かった前提知識

Databricksにおいてはsparkのセッションなどを起動する必要が無い。あらかじめ、sparkオブジェクトが用意されているためこちらを使用すれば良い。

通常のSparkでは以下の通り明示的に立ち上げる必要があるようだ

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("MyApp") \
    .config("spark.sql.shuffle.partitions", 8) \
    .getOrCreate()

●作業の流れ

①Databricks UI上でnotebookを開く

New > Notebook

image.png

②notebookにpythonコードを書き、テーブルをDataFrame形式で読み込む

df = spark.sql("SELECT * FROM samples.nyctaxi.trips")

display(df)

14日の無料トライアルにて実施している。あらかじめ用意されているサンプルテーブルをSQL形式で抽出するやり方となっている。

display()というメソッドはDatabricks独自もの

The display() method is specific to Databricks notebooks and provides a richer visualization.
参考

image.png

②PySparkにてデータ加工

result = df.drop("pickup_zip")
result.display()

ここではdrop()というメソッドにてpickup_zipというカラムの削除を行ってみた。

drop()にあたるメソッドとして何が使えるのかはリファレンスを読み解くことで調査することとなる。
リファレンスの読み解き方は後ほど解説する。

③加工したものをローカルにダウンロード

ダウンロードボタンを押すだけで簡単にダウンロードできる。
※最大5GBという制約がありそう。

image.png

●【参考】PySparkリファレンスの読み解き方

PySparkにて使えるメソッドの調べ方を解説する。これを理解するとやりたいことを生成AIに頼らず実現しやすくなると考える。筆者一個人の考え方を紹介する。

オブジェクト指向言語のリファレンスの読み解き時の考え方

オブジェクト指向の言語のリファレンスにおいては指定のクラスにて使えるメソッドと属性は何かを調べていくのが基本である。そして、メソッドが返すもののクラスが何であるのかを特定し次はそのクラスが持つメソッドと属性を調べていく。このように階層構造となっているものをブレイクダウンして読み解いていくイメージを持っている。

以下のようにブレイクダウンしていく

あるオブジェクトが属するクラスA > クラスAに使えるメソッドB > メソッドBの返り値が属するクラスC > クラスCが属するクラスにて使えるメソッド...

これだけでは理解が難しいと思うため、具体例を元に理解していただきたい。

リファレンス読み解き具体例

以下のコードで読み込んだdfに対してどのようなメソッドが使えるのかを調査する。

df = spark.sql("SELECT * FROM samples.nyctaxi.trips")

①sparkというオブジェクトが属するクラスを調査

spark.sql()というメソッドが使われているらしい。sparkというオブジェクトは何のクラスに該当するのかを確かめてみる。

Databricks notebook上でsparkと入力し実行してみるとクラスが分かる。
image.png

<pyspark.sql.connect.session.SparkSession at 0x7efc0143b530>
⇒sparkというオブジェクトはSparkSessionというクラスであると分かる。

SparkSessionというクラスについてまとめたページをリファレンスから探す

リファレンス

image.png

探すとSpark Sessionクラスについてのページを発見出来る。

SparkSessionというクラスにて使えるメソッドを確認し返り値の型を確認

ページ内のMethodの箇所に記載があるものがsparkオブジェクトにて使えるメソッドである。

image.png

ここにsql()というメソッドが発見出来る。
このsql()というメソッドが何のクラスを返すのかが分かれば、dfというオブジェクトが属するクラスが判明することとなり。dfをどのように加工すればよいのかを調べることが出来る。

sql()というメソッドにはリンクが貼られているためこちらをたどる。

リンク先のreturnsを見れば、どのクラスを返すのかが分かる。sql()DataFrameを返すようだ。つまり、DataFrameクラスにて使えるメソッドがdfに対して使えるメソッドであると分かる。

image.png

④DataFrameクラスにて使えるメソッドを確認

DataFrameクラスのリファレンスページにて記載のメソッドから使えるメソッドを選べばよい。これがdfに対して使用できるメソッド一覧となる。

image.png

df.agg()..といったように記述が行えると分かる

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