Databricks

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

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

今回はDatabricksにおける、Spark DataFrameのユーザー定義関数(UDF)の作り方についてです。

Spark DataFrameのUDFを作るためには、以下の3点がポイントです。

・Scalaで関数を作成する
・DataFrameで使うSQL用のUDFを登録する
・DataFrameで使うScala用のUDFを登録する

試しに、URLエンコードされた文字列をデコードしてくれるdecodeUrl関数を作ります。

1. Scalaで元の関数を作成する

まずはScalaで関数そのものを書きます。

import java.net.URLDecoder

def decodeUrl(x:String): String = {
  URLDecoder.decode(x, "UTF-8")
}

ScalaはJavaのライブラリを使えるので便利ですね。
関数を宣言したら、動作確認をします。

decodeUrl("%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a")

実行すると、「あいうえお」というStringが返ってきます。

作成した関数を実行

 

2. 関数をUDFとして登録して利用する

このdecodeUrl関数をUDFとして登録します。

val decodeUrlScalaUDF = spark.udf.register("decodeUrlSqlUDF", (x:String) => decodeUrl(x))

分かりやすくするためにUDFの名前を分けてます。
SQLで使うUDFとしてdecodeUrlSqlUDFを登録して、さらにScalaで使うUDFとして同時にdecodeUrlScalaUDFも登録します。

このUDFを使って、URエンコードされたカラムをデコードします。

display(adbDF.filter('page_url.contains("%"))
        .select('page_url, decodeUrlScalaUDF('page_url) as "decodedUrl")
        .limit(10))

Adobe AnalyticsのデータフィードでDataFrameを作成している前提です。
page_urlカラムには、エンコードされたURLが計測されているので、それをデコードしてます。

Scala用UDFを実行

URLエンコードされているデータが、decodeUrlScalaUDFによってデコードされて表示されました。

 

3. UDFをSQLで実行する

SQLでもUDFを実行してみます。
createOrReplaceTempViewで先にテーブルを作っておいてから実行します。

%sql
select page_url, 
decodeUrlSqlUDF(page_url) as decoded_url
from adbDF
where page_url like '%\%%'
limit 10

実行するUDFはSQL用のdecodeUrlSqlUDFです。

SQL用のUDFを実行

SQLでもURLがデコードされました。

 

自作のUDFを使えば、ビルトインのメソッドだけでは実現出来ない複雑な処理を使ったクエリの作成が可能になります。

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

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

Mouseflowのフィルター機能が変わりました!前のページ

テーブル(Table)・カラム(Column)・ロー(Row)・フィールド(Field)って何?次のページ

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Google Cloud Platform

    Node.js+GAE: 日本語自然文を形態素解析してネガポジ判定をする

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

  2. Adobe Analytics

    Adobe AEP SDKをTypeScriptで開発したReactNativeアプリに実装する

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

  3. Databricks

    databricks:GCPで利用を開始する

    databricksがGCPに対応し、Mark…

  4. Google BigQuery

    GCP: 今月のGCP課金額をslackに自動的に書き込む

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

  5. Firebase Analytics

    Firebase AnalyticsのデータをフラットなCSVに変換するETL処理

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

  6. Adobe Analytics

    AdobeAnalytics: スクロールで目標に到達したらカスタムリンク

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

カテゴリ
最近の記事
  1. モック作成が面倒で “楽” した話
  2. Fivetranからdbtプロジェクトを実行する
  3. Account Engagementで送るメールをマルチエー…
  4. 協力と裏切りの理論
  5. 【Snowflake Tips】Content-Typeには…
  1. Adobe Analytics

    Adobe Analytics: データフィードをBigQueryで集計する
  2. プログラミング

    Node.jsでCSVファイル内のダブルクオートで囲まれたカラム内のカンマを除去…
  3. GA 360 Suite

    Google Analytics 4:client_idを取得
  4. Tableau

    Tableau-折れ線グラフ
  5. IT用語集

    プラットフォーム(Platform)って何?
PAGE TOP