バツイチとインケンのエンジニアブログ
プログラムやプログラムじゃないこと

Apache Spark: SparkSQLリファレンス〜関数編・文字列関数〜

2015-10-16
書いた人 : バツイチ
カテゴリ : Spark | タグ : Apache Spark, SQL, リファレンス

SparkSQLリファレンス第三部、関数編・文字列関数です。
SparkSQLの構文は構文編、演算子は演算子編をご覧ください。

文字列関数

文字列型・バイナリ型に対して使用する関数です。バージョン 1.5.0 から使用できる関数がとても増えました。

関数 内容 ver.
ascii ascii(e: Column)
先頭単語のasciiコードを数値型(Int)で返却します。
sql:

select ascii( e ) as n from ... 

DataFrame:

df.select( ascii( $"e" ) as "n" ) 

例) eが”apple”だとしたら97が返ります。

1.5.0
base64 base64(e: Column)
バイナリ型をBase64エンコードした文字列を返却します。

sql:

select base64( bins ) from ...

DataFrame:

df.select( base64( bins ) )
1.5.0
concat concat(exprs: Column*)
文字列型のカラムを結合します。文字列型以外は使えません。
concatの中にはいくつでもカラムを入れることができます。

sql:

select concat( first, second ) from ...

DataFrame:

df.select( concat( $"first", $"second" ) )

例) first=”app”, second=”le” の場合、上記は”apple”が返ります。

1.5.0
concat_ws concat_ws(sep: String, exprs: Column*)
concatと似ているのですが、文字列型のカラムとデリミタ文字列を結合します。
rubyやphpのjoinと似ています。

sql:

select concat_ws( '_', first, second ) from ...

DataFrame:

df.select( concat_ws( "_", $"first", $"second" ) )

例) first=”app”, second=”le” の場合、上記は”app_le” が返ります。

1.5.0
decode decode(value: Column, charset: String)
バイナリ型を指定されたcharsetで文字列にデコードします。
charsetに指定できるのは、’US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’。

sql:

select decode( bins, 'UTF-8' ) from ...

DataFrame:

df.select( decode( $"bins", "UTF-8" ) )
1.5.0
encode encode(value: Column, charset: String)
decodeの逆で、文字列を指定されたcharsetでバイナリにエンコードします。
charsetに指定できるのは、’US-ASCII’, ‘ISO-8859-1’, ‘UTF-8’, ‘UTF-16BE’, ‘UTF-16LE’, ‘UTF-16’。

sql:

select encode( bins, 'UTF-8' ) from ...

DataFrame:

df.select( encode( $"bins", "UTF-8" ) )
1.5.0
format_number format_number(x: Column, d: Int)
数値型の少数点をフォーマットした文字列を返却します。
第1引数に数値型カラム、
第2引数に小数点の位を設定します。

sql:

select format_number( x, 2 ) from ...

DataFrame:

df.select( format_number( $"x", 2 ) )

例) “128.56”

1.5.0
format_string format_string(format: String, arguments: Column*)
引数をprintf形式でフォーマットした文字列を返却します。
第1引数にフォーマット文字列、
第2引数〜フォーマット対象カラムを指定します。

sql:

select
  format_string( '%s: %02d', name, age )
from ...

DataFrame:

df.select(
  format_string( '%s: %02d', $"name", $"age" ) )

例) name=”nami”, age=”9″の場合 “nami: 09″が返ります。
printfの書式化文字列については下記のページが詳しいです。
Java書式付き出力

1.5.0
initcap initcap(e: Column)
単語の先頭を大文字に変換した文字列を返却します。

sql:

select initcap( e ) from ...

DataFrame:

df.select( initcap( $"e" ) )

例) c=”hello world”の場合、”Hello World”が返ります。

1.5.0
instr instr(str: Column, substring: String)
指定された文字列を検索し、最初に見つかった位置を返却します。
位置は1から始まり(先頭が1)、見つからなかった場合は0を返します。
引数がnullの場合はnullを返します。

sql:

select instr( str, 'ro' ) from ...

DataFrame:

df.select( instr( $"str", "ro" ) )

例) c=”Borrow or rob?”の場合、4が返ります。

1.5.0
length length(e: Column)
文字列やバイナリの長さを返却します。

sql:

select length( e ) from ...

DataFrame:

df.select( length( $"e" ) )

例) c=”Borrow or rob?”の場合、14が返ります。

1.5.0
lower lower(e: Column)
文字列をすべて小文字に変換します。

sql:

select lower( e ) from ...

DataFrame:

df.select( lower( $"e" ) )

例) c=”Hello World”の場合、”hello world”が返ります。

1.3.0
levenshtein levenshtein(l: Column, r: Column)
2つの文字列のレーベンシュタイン距離を計算して返します。
レーベンシュタイン距離は2つのどの程度異なっているかを示す距離です。

sql:

select levenshtein( l, r ) from ...

DataFrame:

df.select( levenshtein( $"l", $"r" ) )
1.5.0
locate locate(substr: String, str: Column)
locate(substr: String, str: Column, pos: Int)
instrとほとんど一緒なのですが、
指定された文字列を検索し、最初に見つかった位置を返却します。
位置は1から始まり(先頭が1)、見つからなかった場合は0を返します。
こちらは、posで指定した位置からの検索が行えます。

sql:

select locate( 'ro', str, 5 ) from ...

DataFrame:

df.select( locate( "ro", $"str", 5 ) )

例) c=”Borrow or rob?”の場合、11が返ります。

1.5.0
lpad lpad(str: Column, len: Int, pad: String)
文字列の左サイドに指定した文字を埋めて指定長の文字列にします。

sql:

select lpad( str, len, pad ) from ...

DataFrame:

df.select( lpad( $"str", 10, ":::::" ) )

例) str=”hello”の場合、”:::::hello”が返ります。

1.5.0
ltrim ltrim(e: Column)
文字列左端のスペース、タブ、改行、制御文字などを削除します。

sql:

select ltrim( e ) from ...

DataFrame:

df.select( ltrim( $"e" ) )

例) e=” \t\nApple “の場合、”Apple “が返ります。

1.5.0
regexp_extract regexp_extract(e: Column, exp: String, groupIdx: Int)
指定された正規表現(java正規表現に従う)で抽出されるグループのうち、groupIdxで指定されたものを返却します。

sql:

select
  regexp_extract( e, '(\d+)-(\d+)', 1 )
from ...

DataFrame:

df.select(
  regexp_extract( $"e", "(\\d+)-(\\d+)", 1 ) )

例) e=”100-200″の場合、”100″が返ります。

1.5.0
regexp_replace regexp_replace(e: Column, pattern: String, replacement: String)
正規表現(java正規表現に従う)にマッチした文字列をすべて置換します。

sql:

select
  regexp_replace( e, '(\d+)', 'num' )
from ...

DataFrame:

df.select(
  regexp_replace( $"e", "(\\d+)", "num" ) )

例) e=”100-200″の場合、”num-num”が返ります。

1.5.0
unbase64 unbase64(e: Column)
base64の逆で、BASE64エンコードされた文字列をデコードしたバイナリを返却します。

sql:

select unbase64( e ) from ...

DataFrame:

df.select( unbase64( e ) )
1.5.0
rpad rpad(str: Column, len: Int, pad: String)
文字列の右サイドに指定した文字列を埋めて指定長の文字列にします。

sql:

select rpad( str, len, pad ) from ...

DataFrame:

df.select( rpad( $"str", 10, ":" ) )

例) str=”hello”の場合、”hello:::::”が返ります。

1.5.0
repeat repeat(str: Column, n: Int)
文字列型のカラムを指定回数繰り返した文字列を返却します。

sql:

select repeat( str, 3 ) from ...

DataFrame:

df.select( repeat( $"str", 3 ) 

例) str=”hello”の場合、”hellohellohello”が返ります。

1.5.0
reverse reverse(str: Column)
文字列を逆さにした文字列を返却します。

sql:

select reverse( str ) from ...

DataFrame:

df.select( reverse( $"str" ) )

例) str=”Borrow or rob?”の場合、”?bor ro worroB”が返ります。
※回文の良さがいきてないですね(;´∀`)

1.5.0
rtrim rtrim(e: Column)
文字列右端のスペース、タブ、改行、制御文字などを削除します。

sql:

select rtrim( e ) from ...

DataFrame:

df.select( rtrim( $"e" ) )

例) e=” \t\nApple “の場合、” \t\nApple”が返ります。

1.5.0
soundex soundex(e: Column)
Soundexコードを生成して返却します。
Soundexは1文字のアルファベットと3桁の数字で構成された英単語のハッシュシステムです。
詳しくは What is a Soundex code? をご覧ください。
※よってカラムが英単語以外を含む場合は正しく生成されません。
※こんな関数が実装されていて驚愕でした:(;゙゚’ω゚’):

sql:

select soundex( e ) from ...

DataFrame:

df.select( soundex( $"e" ) )

例) e=”apple”の場合、”A140″が返ります。

1.5.0
split split(str: Column, pattern: String)
文字列を指定された正規表現で分割して返却します。
※Arrayで返却されます。

sql:

select split( str, '[1-9]+' ) from ...

DataFrame:

df.select( split( $"str", '[1-9]+' ) )

例) str=”aa2bb3cc”の場合、Seq( “aa”, “bb”, “cc” )が返ります。

1.5.0
substring substring(str: Column, pos: Int, len: Int)
文字列、もしくはバイナリを指定位置から指定された桁数だけスライスします。
バイナリの場合はbyte位置、byteサイズになります。
このメソッドもインデックスは1から始まります。

sql:

select substring( str, 1, 2 ) from ..

DataFrame:

df.select( substring( $"str", 1, 2 ) )

例) str=”apple”の場合、”ap”が返ります。

1.5.0
substring_index substring_index(str: Column, delim: String, count: Int)
文字列を指定されたデリミタで分割した文字列を返却するのですが、その際に、countで指定された分割個数をつなげて返します。
countが正の場合は左端からカウントし、負の場合は右端からカウントします。
大文字・小文字は区別します。

sql:

select
  substring_index( str, '.', 2 )
from ...

DataFrame:

df.select(
  substring_index( $"str", '.', 2 ) )

例) str=”www.apache.org”の場合、”www.apache”が返ります。

translate translate(src: Column, matchingString: String, replaceString: String)
文字列をmatchingStringに対応するreplaceStringに置き換えます。
1文字づつ対応させます。
replaceStringに対応文字がない場合はブランクに置換されます。

sql:

select
  translate( src, 'abcd', '123' )
from ...

DataFrame:

df.select(
  translate( $"src", "abcd", "123" ) )

例) str=”banana was dead”の場合、”21n1n1 w1s e1″が返ります。

1.5.0
trim trim(e: Column)
左右両端のスペース、タブ、改行、制御文字などを削除します。

sql:

select trim( e ) from ...

DataFrame:

df.select( trim( $"e" ) )

例) e=” \t\nApple “の場合、”Apple”が返ります。

1.5.0
upper upper(e: Column)
文字列をすべて大文字に変換します。

sql:

select upper( e ) from ...

DataFrame:

df.select( upper( $"e" ) )

例) e=”Hello World”の場合、”HELLO WORLD”が返ります。

1.3.0

構文

  • SELECT .. FROM …
  • WHERE
  • JOIN
  • ORDER BY
  • LIMIT
  • GROUP BY
  • HAVING
  • CUBE
  • ROLLUP

演算子

  • 比較演算子
  • bit演算子
  • 算術演算子
  • 集合演算子
  • 論理演算子

関数

  • 文字列関数
  • 変換関数
  • 数学関数
  • 日付・時刻関数
  • 集計関数
  • Window関数
  • その他の関数

宜しければこちらの動画もどうぞー
Sparkのインストールからspark-shellでのword-countまで行っています。

スクリーンショット 2015-09-07 22.55.18

https://www.youtube.com/watch?v=Dci8Vig3PKw

pysparkをJupyterで使っています。

スクリーンショット 2015-10-13 12.46.16

https://www.youtube.com/watch?v=D-aotRlBrvw

このエントリーをはてなブックマークに追加
Tweet

← Apache Spark Part3 ipython notebookからpysparkを使おう
Apache Spark: SparkSQLリファレンス〜関数編・変換関数〜 →

 

最近書いた記事

  • Ryzen7 3800XT でmini ITXオープンフレームPCを作る
  • Pythonで機械学習入門 競馬予測
  • HP ENVY 15 クリエイターモデルレビューとRAID0解除
  • JRA-VAN データラボを使って、競馬データを収集する
  • Surface Pro 3 にubuntu18.04を入れる

カテゴリー

  • Android
  • Apache Flink
  • API
  • AWS
  • bazel
  • BigQuery
  • Cassandra
  • Docker
  • Druid
  • Elasticsearch
  • Git
  • Golang
  • gradle
  • HDFS
  • JavaScript
  • jvm
  • Linux
  • MongoDB
  • MySQL
  • Nginx
  • Nodejs
  • PaaS
  • PHP
  • Python
  • RabbitMQ
  • Raspberry Pi
  • React Native
  • Redis
  • Riak
  • rust
  • scala
  • Scheme
  • SEO
  • solr
  • Spark
  • spray
  • Sublime Text
  • Swift
  • Tableau
  • Unity
  • WebIDE
  • Wordpress
  • Youtube
  • ひとこと
  • カンファレンス
  • スケジューラ
  • マイクロマウス
  • 広告
  • 技術じゃないやつ
  • 株
  • 機械学習
  • 競馬
  • 自作キーボード
  • 自然言語処理

アーカイブ

  • 2021年4月
  • 2021年2月
  • 2021年1月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年9月
  • 2018年5月
  • 2018年3月
  • 2018年2月
  • 2017年9月
  • 2017年8月
  • 2017年6月
  • 2017年4月
  • 2017年3月
  • 2017年1月
  • 2016年10月
  • 2016年9月
  • 2016年8月
  • 2016年6月
  • 2016年5月
  • 2016年4月
  • 2016年3月
  • 2016年2月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年10月
  • 2015年9月
  • 2015年8月
  • 2015年6月
  • 2015年5月
  • 2015年2月
  • 2015年1月
  • 2014年12月
  • 2014年11月
  • 2014年9月
  • 2014年6月
  • 2014年5月
  • 2014年3月
  • 2014年2月
  • 2014年1月
  • 2013年12月
  • 2013年11月
  • 2013年10月
  • 2013年9月
  • 2013年8月

書いた人

  • バツイチちゃん
  • インケンくん

このブログについて

エンジニアとしての考え方が間逆な2人がしょーもないこと書いてます。

バツイチ

アイコン

IT業界で働くエンジニアです。名前の通りバツイチです。
理論や抽象的概念が好きだけど人に説明するのが下手。

インケン

アイコン

バツイチちゃんと同じ業界で働いています。
理論とか開発手法とかは正直どうでもよくて、
生活する上で役に立つことに使いたい

Copyright 2025 バツイチとインケンのエンジニアブログ