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″が返ります。 |
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 |
構文
演算子
関数
宜しければこちらの動画もどうぞー
Sparkのインストールからspark-shellでのword-countまで行っています。
https://www.youtube.com/watch?v=Dci8Vig3PKw
pysparkをJupyterで使っています。
https://www.youtube.com/watch?v=D-aotRlBrvw