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

Apache Spark: SparkSQLリファレンス〜演算子編〜

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

SparkSQLリファレンス第二部、演算子編です。
SparkSQLの構文はApache Spark: SparkSQLリファレンス〜構文編〜をご覧ください。

執筆しているうちにSparkの最新版が1.5.0から1.5.1に上がってしまいました。

演算子

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

 

・比較演算子

比較演算子は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 &lt;=&gt; 0

DataFrame >>>

DataFrame.where( $"col1" &lt;=&gt; 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*" )

構文

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

関数

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

← Apache Spark: SparkSQLリファレンス〜構文編〜へ

宜しければこちらの動画もどうぞー
Sparkで読み込んだCSVファイルをMySQLにつっこんでます。

スクリーンショット 2015-09-13 21.26.22

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

iPythonからpysparkを使って↑と同じことやってます。

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

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

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

← Unity初心者がボールごろがしゲームを作る part1
Apache Spark Part3 ipython notebookからpysparkを使おう →

 

最近書いた記事

  • 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 バツイチとインケンのエンジニアブログ