iT邦幫忙

6

Spark SQL實測 MySQL, MSSQL, Oracle "SELECT語法"

任何結構性的資料(ex:Json)在Spark SQL下,都可以透過
createOrReplaceTempView("view名稱") 告知Spark SQL
你將資料註冊成一個view,之後就可以用熟悉的SQL語法來檢索資料!

scala> val task = spark.read.json("file:///data_toysrus.json")
scala> task.craeteOrReplaceTempView("toysrus")

但是光資料庫就各有各的山頭,SQL語法當然也是!
今天就拿W3School貼的語法來實測看看Spark SQL的支援程度!
第一個登場的是 MySQL:

scala> val mysql = spark.sql("SELECT * FROM toysrus LIMIT 3")
scala> mysql.show
+----------+------------+----------+-------+-------------+---------+--------+
|customerId|customerName|    date4T|  price|productAmount|productId|  time4T|
|        51|    aclindsa|2018-05-11|9506.21|            1|       68| 6:55 AM|
|        99|adamschwartz|2018-05-11|4107.59|            5|       86| 7:39 PM|
|        79|         ben|2018-05-11|2987.22|            7|       58|11:57 AM|
+----------+------------+----------+-------+-------------+---------+--------+

看起來mysql是被Spark SQL認可接受的!

第二個登場的是 MSSQL:

scala> val mssql = spark.sql("SELECT TOP 3 * FROM toysrus")
scala> mssql.show
org.apache.spark.sql.catalyst.parser.ParseException:
... ...
== SQL ==
SELECT TOP 3 * FROM toysrus
-----------^^^

TOP語法掛了,立馬噴錯!mssql挑戰失敗!

第三個登場的是 Oracle:

scala> val oracle = spark.sql("SELECT * FROM toysrus WHERE ROWNUM <= 3")
scala> oracle.show
org.apache.spark.sql.AnalysisException: cannot resolve 'ROWNUM' given input 
columns: [... ...
... ...

ROWNUM被判定為欄位,但實際Json資料本來就沒ROWNUM這個屬性!oracle挑戰失敗!


1 則留言

1
小魚
iT邦高手 1 級 ‧ 2018-05-11 19:18:58

問一下, Spark SQL 要怎麼用,
是用什麼後端語言呢?
還是也像MySql之類的要安裝一個Server?

Spark SQL***只是Spark框架提供的其中一項服務,其他還有***Spark串流GraphX、以及***機器學習***等服務。而Spark本身只是提供一種"彈性分散式資料儲存(RDD)"的框架,透過Spark部屬在多台電腦,可直接在多台電腦的記憶體上進行資料處理;目的就是***處理RDB所不堪負荷處理的即時資料及大數據***。目前Spark的後端語言主要是Java、Scala、Python(Spark SQL還支援R)。不過資料量如果不大例如GB等級以下,或是非即時性,其實效能未必贏過RDB!以上只是小弟個人粗略見解,***魚大***有興趣的話可參考***joechh大大***的Spark in Scala鐵人30天,或者Apache Spark入門(1)

小魚 iT邦高手 1 級‧ 2018-05-12 14:36:16 檢舉

恩恩,感恩~有空來研究一下...

我要留言

立即登入留言