成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

文件f1.txt:

esProc_java_structured_setoperator_1

文件f2.txt:

esProc_java_structured_setoperator_2

集算器代碼:

esProc_java_structured_setoperator_3

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

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

esProc_java_structured_setoperator_4

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

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

esProc_java_structured_setoperator_5

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

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

esProc_java_structured_setoperator_6

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

esProc_java_structured_setoperator_7

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

esProc_java_structured_setoperator_8

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

    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) 。

計算結果如下:

esProc_java_structured_setoperator_9

對于內存放不下的大文件,可以用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代碼如下:

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

 

責任編輯:王雪燕 來源: 博客園
相關推薦

2015-12-08 13:53:56

java結構對齊連接

2015-12-18 10:10:06

集算器Java結構化

2014-03-14 09:52:15

非結構化數據

2021-12-12 08:37:18

結構化數據非結構化數據數據

2024-10-08 10:57:04

2021-12-29 10:51:19

JavaSPL架構

2024-05-27 00:32:45

2018-04-03 14:00:03

結構化數據非結構化數據數據庫

2017-12-06 15:46:31

深度學習結構化數據NLP

2023-06-19 07:08:22

結構化數據ChatGPT

2023-12-25 15:00:18

結構化布線光纖

2022-05-24 09:52:37

Spark SQL大數據處理Hive

2012-02-08 15:54:05

ibmdw

2010-01-13 13:20:08

VB.NET結構化異常

2023-12-26 09:00:00

Java結構化并發開發

2011-03-01 13:59:43

結構化

2017-05-16 21:31:03

結構化數據新模式

2009-10-09 17:57:20

結構化布線

2011-02-28 13:55:00

結構化布線

2022-01-04 05:40:17

Whispers安全工具靜態代碼分析
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲视频 | 欧美精品免费观看二区 | 国产精品久久久久久久久久久新郎 | 国产乱码精品1区2区3区 | 欧美乱操 | 中文字幕日韩欧美一区二区三区 | 中文字幕免费在线 | 国产激情视频 | 在线免费观看黄色 | 日本免费在线观看视频 | 51ⅴ精品国产91久久久久久 | 久久午夜精品福利一区二区 | 国产精品不卡一区 | 97精品一区二区 | 黄色在线免费播放 | 国产精品一二三区在线观看 | 国产精品乱码一区二三区小蝌蚪 | 中文字幕一区二区三区日韩精品 | 久久精品色视频 | 亚洲国产成人精 | 亚洲成人一区二区三区 | 一级毛片大全免费播放 | 精品一区在线免费观看 | 欧洲国产精品视频 | 国产精品久久久久久久久图文区 | 在线观看中文字幕dvd播放 | 成人国产a | 一区二区视频 | 亚洲不卡在线观看 | 成人性视频免费网站 | 色综合久 | 国产一区二区不卡 | 精品一区二区视频 | 日韩欧美精品一区 | 亚洲伊人久久综合 | 成人性视频免费网站 | 91av大全 | 激情五月婷婷 | 国产综合久久 | h小视频 | 久久夜视频 |