能嵌入JAVA程式碼被呼叫,又能進行資料計算的開源庫,資料庫類的有HSQLDB/Derby/H2等。這幾個和SQLite的毛病一樣,入庫過程非常繁瑣,要檢查表名是否重複、建表結構、讀檔案、解析欄位、插入記錄、建索引等,而且沒法處理不規則的文字和特殊資料來源;至於近年來計算庫逐漸被重視的功能--JSON計算,雖然內嵌資料庫也是趕鴨子上架,但這幾個還不如內嵌資料庫。DataFrame類的計算庫有Tablesaw/ Joinery/ Morpheus等,在多層JSON(半結構化資料)的讀取和計算上,它們比資料庫要方便多了,但二維結構化資料的計算又遠不如資料庫。
二維結構化資料和多層JSON的計算都足夠強,又支援多種資料來源,可處理不規則文字的嵌入式JAVA開源庫,集算器SPL是個更好的選擇。
JAVA呼叫SPL只需
JDBC
介面
,基本看一遍就會。比如把tab分隔的文字檔案Orders。txt按Client列順序排序,按Amount列逆序排序:
一個T函式就相當於內嵌資料庫入庫那一整套過程,比那些內嵌的資料庫方案要方便多了。
為了資料庫程式設計師的方便,SPL也支援
SQL
語句
,比如上面的排序可改寫為:
再講講剛才的sort函式,這樣的基本計算函式SPL有上百個,可以直接
完成大多數常規計算
。下面試舉一些:
處理過的資料還可以
持久化
為btx集檔案,不僅計算效能高,而且體積更小。比如將兩個同構的文字檔案寫在一個btx裡,並去掉兩者重複的行:
之後就可以像普通檔案那樣使用:
btx還可以預先進行有序化處理,從而獲得更高計算效能,比如進行二分查詢,詳情參考官網。
為了降低耦合性,
SPL
演算法可外置於JAVA
程式碼
。比如,找出銷售額累計佔到一半的前n個大客戶,並按銷售額從大到小排列。先將SPL指令碼存為檔案bigCustomer。dfx:
再在JAVA程式碼中以儲存過程的方式呼叫指令碼檔案:
有些運算較複雜,比如涉及分組後計算、有序計算、集合計算,即使用儲存過程也難以解決,更別說連儲存過程都不支援的內嵌資料庫了。SPL提供了
強大的語法和豐富的庫函式
,可以大幅簡化複雜運算邏輯。比如:計算某支股票最長的連續上漲天數,SPL只需兩行:
有些運算程式碼較長,或有分支和迴圈,SPL提供了專用的IDE,可以方便地
跟蹤除錯,觀察每一步的計算結果
:
對於
不規則的文字
, SPL同樣可以處理。簡單的比如以雙豎線||為分隔符,可用如下SPL語句讀取:
複雜些的不規則的文字,參考《未結構化文字的讀寫和解析處理》(底部原文中檢視連結)
SPL
支援多種資料來源
,除了文字檔案,還有Excel、資料庫、各類NoSQL、webService、restful等。比如:restful返回多層JSON,用來描述多個員工和員工的多個訂單,需要查詢出所有價格在500-2000,且客戶名包含bro字樣的訂單。SPL程式碼如下:
集算器SPL是優秀的JAVA嵌入式開源計算庫,在結構化計算方面比資料庫更強,在多層資料的計算方面比Dataframe更方便,在多資料來源支援方面更是全面超過兩者。
乾學院
資料技術與產品的知識分享平臺
識別左側二維碼關注乾學院
微信搜一搜 : 乾學院
請來【乾學院】的原文中留言,發表您的觀點!