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. 最速で理解したい人のためのIT用語集

関連記事

  1. Databricks

    databricksのnotebookを使ってみよう その1

    こんにちは。エクスチュアの松村です。…

  2. Databricks

    Databricks: Delta Lakeを使ってみる

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

  3. Databricks

    databricks:GCPで利用を開始する

    databricksがGCPに対応し、Mark…

  4. Databricks

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

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

  5. Adobe Analytics

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

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

  6. Databricks

    Databricks: Spark RDDで使う主なメソッド

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

最近の記事

  1. 【GA4/GTM】dataLayerを使ってカスタムイベント…
  2. KARTE を使ってサイト外でも接客を
  3. 【GA4/GTM】dataLayerを活用しよう
  4. ジャーニーマップをデジタルマーケティングの視点で
  5. ChatGPT ProからClaude3 Proへ移行した話…
  1. Adobe Analytics

    訪問別滞在時間とは-Adobe Analyticsの指標説明
  2. Tableau

    あなたのTableau(タブロー)が重い理由【パフォーマンスの記録】
  3. Mouseflow

    訪問者の不満を見つける
  4. Adobe Analytics

    Adobe Summit 2020レポート: Advanced Techniqu…
  5. ブログ

    エクセル関数の基礎
PAGE TOP