中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

集算器協助java處理結構化文本的集合運算是怎樣的

發布時間:2022-01-06 21:34:23 來源:億速云 閱讀:139 作者:柒染 欄目:編程語言

今天就跟大家聊聊有關集算器協助java處理結構化文本的集合運算是怎樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

JAVA不直接支持集合運算,因此要用嵌套循環才能實現文本文件之間的交集、并集、差集 等集合運算,如果文件數量較多,或者文件較大而無法放入內存直接計算,再或者要按照多個字段進行集合運算,則相應的代碼會更加復雜。集算器直接支持集合運 算,可以協助JAVA輕松實現此類算法,下面我們通過例子來看一下具體作法。

有兩個小文件:f1.txt和f2.txt,***行是列名,現在需要對文件中的Name字段進行交集運算。部分數據如下:

文件f1.txt:

集算器協助java處理結構化文本的集合運算是怎樣的

文件f2.txt:

集算器協助java處理結構化文本的集合運算是怎樣的

集算器代碼:

集算器協助java處理結構化文本的集合運算是怎樣的

A1、B1:用import函數將文件讀=[A1.(Name),B1.(Name)].isect()入內存,默認的分隔符是tab。這里的函數 選項@t表示將***行讀為列名,這樣一來后續的計算就可以直接用Name和Dept來引用相應的列,如果***行不是列名,則應當用_1和_2這種默認列名 來引用。

計算后A1和B1的值分別如下:

集算器協助java處理結構化文本的集合運算是怎樣的

函數import可以讀取指定的列,比如本案例只有Name會參與計算,因此可以只讀取Name列,對應的代碼是:file(“E:\\f1.txt”).import@t(Name) 。

A2= 函數isect可以進行集合間的交集運算,A1.(Name)表示取出A1的Name列,形成一個集合,B1.(Name)表示取出B1的Name列。本案例的最終結果如下:

集算器協助java處理結構化文本的集合運算是怎樣的

A3:result A2。這表示將計算結果輸出到JDBC接口。A3可以和A2合為一步:result [A1.(Name),B1.(Name)].isect() 。

上述是求交集的過程,求并集只需換個函數:[A1.(Name),B1.(Name)].union(),計算結果如下:

集算器協助java處理結構化文本的集合運算是怎樣的

求差集的代碼:[A1.(Name),B1.(Name)].diff(),計算結果如下:

集算器協助java處理結構化文本的集合運算是怎樣的

還有一類特殊的集合算法:和集,即求并集時保留重復的元素,和集的代碼:[A1.(Name),B1.(Name)].conj(),計算結果如下:

集算器協助java處理結構化文本的集合運算是怎樣的

可以直接用運算符來代替函數,寫法更加簡潔,比如交集,并集、差集、合集可以改寫為:

A1.(Name) ^ B1.(Name)
     A1.(Name) & B1.(Name)
     A1.(Name) \ B1.(Name)
     A1.(Name) | B1.(Name)

也可以對多個文件進行集合運算,比如f1.txt、f2.txt、f3.txt讀入內存后對應的變量分別是A1、B1、C1,對它們求交集,代碼如 下:A1.(Name) ^ B1.(Name) ^C1.(Name) 或  [A1.(Name),B1.(Name),C1.(Name)].isect() 。

有時候文件比較大,會影響集合運算的性能,可以用sort函數事先排序,再用merge函數來進行集合運算,這樣一來性能會顯著提高。其中,求交集時應當使用函數選項@i,并集使用@u,差集使用@d,對應的代碼分別如下:

=[A1.(Name).sort(),B1.(Name).sort()].merge@i()
     =[A1.(Name).sort(),B1.(Name).sort()].merge@u()
     =[A1.(Name).sort(),B1.(Name).sort()].merge@d()

函數merge還可以進行多字段的集合運算,假設不同的Dept會存在相同的Name,現在需要將Dept和Name當作一個整體來進行交集運算, 對應的代碼如下:[A1.sort(Dept,Name),B1.sort(Dept,Name)].merge@i(Dept,Name) 。

計算結果如下:

集算器協助java處理結構化文本的集合運算是怎樣的

對于內存放不下的大文件,可以用cursor函數來讀取文件,并用merge函數來實現集合運算。其中,求交集的代碼如下:
    A1=file(“e:\\f1.txt”).cursor()
     B1=file(“e:\\f2.txt”).cursor()
     A2=[ A1.sortx(Name),B1.sortx(Name)].merge@xi(Name)

注意,這里函數cursor并不會將數據全部讀入內存,而是以游標(或流)的方式打開文件。集算器引擎會自動分配合適的緩沖區,每次讀取一部分數據參與計算,再循環往復,完成最終的計算。

與內存計算不同,操作游標需要使用游標函數,比如排序時應當使用函數sortx。這里的merge函數使用了兩個函數選項,@i表示求交集,@x表示參與計算的對象不是內存數據,而是游標。另外,union等函數只能進行內存數據的集合運算,不能用于大文件。

上述腳本已經完成了所有的數據處理工作,接下來通過JDBC將集算器腳本集成在JAVA里。JAVA代碼如下:

//建立esProc jdbc連接  Class.forName(“com.esproc.jdbc.InternalDriver”);  con= DriverManager.getConnection(“jdbc:esproc:local://”);  //調用esProc,其中test是腳本文件名  st =(com.esproc.jdbc.InternalCStatement)con.prepareCall(“call test()”);  st.execute();//執行esProc存儲過程  ResultSet set = st.getResultSet();//獲得計算結果

看完上述內容,你們對集算器協助java處理結構化文本的集合運算是怎樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿坝县| 隆尧县| 云梦县| 丰原市| 连江县| 西畴县| 郸城县| 宁化县| 清徐县| 仙桃市| 罗源县| 荆州市| 安泽县| 平度市| 会东县| 贵南县| 青龙| 张家口市| 全州县| 福贡县| 库尔勒市| 宁晋县| 佛教| 富阳市| 文成县| 高青县| 邯郸县| 滦平县| 保德县| 靖宇县| 秦皇岛市| 元朗区| 绥江县| 青川县| 富锦市| 五原县| 罗定市| 神池县| 衡山县| 庄浪县| 胶州市|