Spark SQL Wildcard Example


Spark SQL

        最近工作上的需要使用Spark SQL連接不同的DataBase,或是連接Nosql,是個非常的實用工具,一般使用SQL語法,只能單一Search一個Database多個Table,但是在Spark SQL完成不一樣,可以跨不同的Database不同的Table在將需要的Table,Join or where,這樣少減非常多時間及麻煩。個人是使用Scala語言,Spark SQL也可以Java語言,只是個人覺得Java在編寫Code時需要編寫蠻多行數,所以改成用Scala寫簡單又快速 :)。

SQL語法與Spark SQL大約有點相識,很多都是差不多,例如用SQL "Where" ID=1Spark SQL 一樣也是"Where" 只是Spark SQL 的等於是"===" ,ID === 1 ,或是可以使用Filter 功能與 Where是一樣的。看個人使用的習實,自已常用的是Filter

在Spark SQL如何使用萬用字元search需要的資料呢?
範例一:找出大寫A-Z其他不需要方法:
SQL 語法

SELECT * FROM USER WHERE TEXT LIKE '%A-Z%'


Spark SQL 語法

.filter( col(TEXT).rlike("[^.*A-Z.*]") )

解釋一下Spark SQL rlike 是有包括[字元] ,like則是完全符合字元
大家在使用時需要注意。這也是自已摸索很久才瞭解,
.*則是包括全部字元, *.則是一個字元,分享給大家。
如果需要使用以string比對內容文字需要import spark function
    import org.apache.spark.sql.functions._

範例二:找出相同內容文字:
SQL  語法

SELECT * FROM USER WHERE substring(TEXT,2,4) = 'NEIL';


Spark SQL 語法

.filter( substring(col(TEXT),2,4).like("NEIL") )