SparkSQLリファレンス第二部、演算子編です。
SparkSQLの構文はApache Spark: SparkSQLリファレンス〜構文編〜をご覧ください。
執筆しているうちにSparkの最新版が1.5.0から1.5.1に上がってしまいました。
演算子
・比較演算子
比較演算子は2つの式を比較した結果を真偽値(true, false, null)で返却します。
SQL | DataFrame | DataFrame(java) | 意味 |
---|---|---|---|
= | === | equalTo | 等しい |
> | > | gt | より大きい |
< | < | lt | より小さい |
>= | >= | geq | 以上 |
<= | <= | leq | 以下 |
<> | !== | notEqual | 等しくない |
!= | !== | notEqual | 等しくない |
<=> | <=> | eqNullSafe | 等しくない(Nullセーフ) |
<=>はSparkの便利な独自演算子で、集合がnullを取りうる場合にもnullではなく比較結果を返却します。
SQL >>>
SELECT col1 FROM dataframe WHERE col1 <=> 0
DataFrame >>>
DataFrame.where( $"col1" <=> 0 )
・bit演算子
bit演算子はその名の通りbit演算を行います。
SQL | DataFrame | DataFrame(java) | 意味 |
---|---|---|---|
& | bitwiseAND | bitwiseAND | ビット単位AND |
| | bitwiseOR | bitwiseOR | ビット単位OR |
^ | bitwiseXOR | bitwiseXOR | ビット単位XOR |
~ | bitwiseNOT | bitwiseNOT | ビット単位NOT もしくは 補数 |
bit演算を行ったことのない方はイメージしづらいかもしれませんが、
図にするとかんたんです。
A | 11000001 ----+------------ B | 00111111
上記のようなデータA,Bに対しbit演算子 & を使うとA & B => 00000001が返ります。
A | B では11111111が返ります。
A ^ B では11111110が返ります。
bit単位の論理演算を行うのです。
~ は2つの式ではなく1式に使い、bitを反転させます。
~A は 00111110。
詳しくはwikipediaをどうぞ。
SQL >>>
SELECT col1 ^ col2 FROM dataframe
DataFrame >>>
DataFrame.select( $"col1" bitwiseXOR $"col2" )
・算術演算子
算術演算子は数値型のデータに対して計算を行います。
SQL | DataFrame | DataFrame(java) | 意味 |
---|---|---|---|
+ | + | plus | 加算 |
– | – | minus | 減算 |
* | * | multiply | 乗算 |
/ | / | divide | 除算 |
% | % | mod | 剰余 |
SQL >>>
SELECT col1 * col2 FROM dataframe
DataFrame >>>
DataFrame.select( $"col1" * $"col2" )
・集合演算子
集合演算子を使うと2つの集合を1つにまとめることができます。
SQL | DataFrame | DataFrame(java) | 意味 |
---|---|---|---|
UNION ALL | unionAll | unionAll | 2つの集合を重複を気にせず結合する |
UNION [DISTINCT] | unionAllとgroupByを組み合わせる | 左に同じ | 2つの集合を重複を除いて結合する |
INTERSECT | intersect | intersect | 2つの集合の重複していない部分を返却する |
EXCEPT | except | except | 前の集合から後ろの集合を除いた部分を返却する |
SQL >>>
SELECT * FROM dataframe1 UNION dataframe2
DataFrame >>>
DataFrame1 .unionAll( DataFrame2 ) .groupBy( $"col1", $"col2", $"col3" )
・論理演算子
論理演算子は式の真偽値(true, false, null)を返却します。
SQL | DataFrame | DataFrame(java) | 意味 |
---|---|---|---|
AND | && | and | 左右ともtrueの場合trueを返却 |
OR | || | or | 左右のいずれかがtrueの場合trueを返却 |
NOT | !== | notEqual | 式の値を反転して返却 |
IN | isin | isin | オペランドが式の 1 つに一致する場合trueを返却 |
LIKE | like | like | オペランドがパターンに一致する場合trueを返却 |
なし | rlike | rlike | オペランドが正規表現に一致する場合trueを返却 |
BETWEEN | between | between | オペランドが範囲内にある場合trueを返却 |
※DataFrameのinはdeprecatedとなりました。
SQL >>>
SELECT col1 FROM dataframe WHERE col1 LIKE 'ap%'
DataFrame >>>
DataFrame.where( $"col1" rlike "^ap*" )
構文
関数
← Apache Spark: SparkSQLリファレンス〜構文編〜へ
宜しければこちらの動画もどうぞー
Sparkで読み込んだCSVファイルをMySQLにつっこんでます。
https://www.youtube.com/watch?v=EHbsoPcZ5Wk
iPythonからpysparkを使って↑と同じことやってます。
https://www.youtube.com/watch?v=D-aotRlBrvw