Databricks

ScalaでDatabricksのDataFrameを扱う

こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。
今回はScala言語でのDatabricksのDataFrameの使い方を紹介します。

DataFrameとは

DataFrameとは、Spark上でデータファイルをデータベーステーブルのようにして扱うためのオブジェクトです。
DataFrameにはfilterやjoinなどのメソッドが用意されており、これらを扱うためのAPIがDataFrame APIです。

以前の記事ではSparkのRDD(Resilient Distributed Datasets)というコレクションを使ってデータを操作しました。
DataFrameはRDDよりも強力で便利な機能が備わってるので、ぜひ覚えましょう。

DatabricksのサイトにはDataFrameのチュートリアルが載ってます。

DataFrames – Getting Started with Apache Spark on Databricks

しかし例として掲載されてるサンプルコードがPythonとSQLで記述されていて気に入らないのでw、ここはScalaで書き直します。

データファイルをロードする

Databricksにはチュートリアル用のサンプルデータ*が用意されてます。
このCSVファイルをロードして、DataFrameを作成します。

*アメリカの州別の人口と住宅価格の比較データです。

空のScalaノートブックを作成して、下記のScalaプログラムを実行します。

//サンプルデータ
val fileLocation = "/databricks-datasets/samples/population-vs-price/data_geo.csv"
val fileType = "csv"
val data = spark.read.format(fileType) 
  .option("header", "true") //一行目はヘッダ
  .option("inferSchema", "true") //スキーマは自動推測
  .load(fileLocation)
val datac = data.cache() //キャッシュしとく
val df = datac.na.drop() //全てがnullの行はドロップ

DataFrameの中身を確認する

dfという名前のDataFrameを作成したので、この中身をtakeメソッドで確認します。
takeの引数で、表示する行数を指定する事が出来ます。

df.take(10) //先頭10行を取得

DataFrameの中身

中身が見えたのですが、Array型の配列データなので見づらい。。
というわけで、今度はdisplayメソッドを使って、これを表形式に整形します。

display(df.select("*"))

displayで表形式に整形

DataFrameからデータを抽出する

CSVファイルからDataFrameを生成する事が出来たので、今度はselectメソッドを使ってデータを抽出します。
試しに、[State Code]カラムと[2015 median sales price]カラムを抽出します。*

*アメリカの州コードと、2015年の住宅価格中央値

display(df.select("State Code", "2015 median sales price"))

selectメソッドで抽出

SQLのような感覚でデータを抽出できました。

データを条件で絞り込みたい場合はfilterメソッドを使います。
[City]カラムと[2014 Population estimate]カラムを抽出して、ワシントン州([State Code]が「WA」に等しい)という条件でデータを絞り込みます。

display(df.select("City", "2014 Population estimate").filter($"State Code" === "WA"))

filterで絞り込み

DataFrameをグラフ化する

DataFrameのdisplayメソッドを使って表形式でデータを表示する事が出来ましたが、他にも様々なビジュアライズオプションを使ってグラフ化する事が出来ます。

では、さらに新しいデータを抽出します。
[City] カラムをディメンションとして、[2014 Population estimate]と[2015 median sales price]を指標として並べて、これを円グラフにします。
下記のScala文でまずは表形式のデータを表示します。
ここでは、orderByとdescを使ってデータを降順でソートしています。

display(df.select("City", "2014 Population estimate", "2015 median sales price")
       .orderBy($"2015 median sales price".desc).take(10)) //降順でソートして先頭10行を取得

orderByとdescで降順ソート

抽出結果の表の下に、ビジュアライズオプションのボタンが表示されています。
この中から、[Pie]を選びます。

Pieチャートを選択

デフォルトでは円グラフが1個しか描画されないので、[Plot Options]を開いて下記のように並べます。

Keys:[City]
Values: [2014 Population estimate], [2015 median sales price]

グラフのオプション設定

[Apply]を押すと、円グラフが描画されます。

DataFrameを円グラフで可視化

まとめ

DataFrameはデータベーステーブルを操作するような、より直感的なAPIが備わってます。
ぜひDataFrameAPIをマスターして、柔軟でスケーラブルな分析を実践してください。

 

弊社はデジタルマーケティングからビッグデータ分析まで幅広くこなすデータ分析のプロ集団です。
Databricksのコンサルティング/導入支援についてのお問合わせはこちらからどうぞ。

ブログへの記事リクエストはこちらまでどうぞ。

関連記事

  1. Databricks

    Databricks: Delta Lakeを使ってみる

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は…

  2. Databricks

    Databricksを始める前に覚えておきたいScalaプログラミングの基本

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。最近ツイッ…

  3. Adobe Analytics

    Azure DatabricksでAdobe AnalyticsのDatafeedを分析する

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回はAz…

  4. Amazon Web Services

    Databricks Community Editionを使ってApache Sparkを無料で学ぶ…

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は、無…

  5. Databricks

    Databricks: Spark DataFrameでユーザー定義関数を使う

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は…

  6. Databricks

    Databricks: Spark DataFramesをJDBCから作成する

    こんにちは、エクスチュアの権泳東(コン・ヨンドン)です。今回は…

最近の記事

  1. Adobe Analytics: BigQueryでパーティ…
  2. 続・SafariのITP2.x対策として別サーバー使ってクッ…
  3. Big QueryでWindow関数を用いて、累積和を計算す…
  4. Adobe Analytics: DatafeedをGoog…
  5. Adobe DTMからAdobe Launchに一発アップグ…
  1. Databricks

    Databricks: Delta Lakeを使ってみる
  2. Adobe Analytics

    Adobe Analytics:計算指標でevents変数を後付けでパーティシペ…
  3. Google Analytics

    Google Tag Manager上でGoogle Analyticsのcli…
  4. Adobe Analytics

    Adobe Analytics: ランドスケイプの「企業ログ解析データベースAP…
  5. ObservePoint

    ObservePoint TagDebuggerでページに埋まっているタグを無…
PAGE TOP