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: Spark DataFrameでユーザー定義関数を使う

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

  2. Amazon Web Services

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

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

  3. Databricks

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

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

  4. Databricks

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

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

  5. Databricks

    Databricks: Spark DataFrameでピボットグラフを作る

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

  6. Databricks

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

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

最近の記事

  1. VPC Service Controlsで「NO_MATCH…
  2. モダンデータスタックなワークフローオーケストレーションツール…
  3. Streamlit in Snowflakeによるダッシュボ…
  4. Streamlit in SnowflakeによるStrea…
  5. Streamlitを使った簡単なデータアプリケーション作成ガ…
  1. Data Clean Room

    忘年会シーズンに「DCRごっこ」のご提案
  2. IT用語集

    【完全版】Tableau(タブロー)って何?
  3. Tableau

    Tableauで見たい期間のみの昨年対比推移グラフを作る方法
  4. Snowflake

    Snowflakeとは?Data Cloud World Tour から見る20…
  5. ヒートマップ

    【Tips】フリクションとは?
PAGE TOP