娃哈哈网站建设策划书,wordpress不显示作者评论,服务器个人买能干什么,一手网推项目平台有两个小文件#xff1a;f1.txt和f2.txt#xff0c;第一行是列名#xff0c;现在需要对文件中的Name字段进行交集运算。部分数据如下#xff1a;文件f1.txt:文件f2.txt:集算器代码#xff1a;A1、B1#xff1a;用import函数将文件读[A1.(Name),B1.(Name)].isect()入内存f1.txt和f2.txt第一行是列名现在需要对文件中的Name字段进行交集运算。部分数据如下文件f1.txt:文件f2.txt:集算器代码A1、B1用import函数将文件读[A1.(Name),B1.(Name)].isect()入内存默认的分隔符是tab。这里的函数选项t表示将第一行读为列名这样一来后续的计算就可以直接用Name和Dept来引用相应的列如果第一行不是列名则应当用_1和_2这种默认列名来引用。计算后A1和B1的值分别如下函数import可以读取指定的列比如本案例只有Name会参与计算因此可以只读取Name列对应的代码是file(“E:\\f1.txt”).importt(Name) 。A2 函数isect可以进行集合间的交集运算A1.(Name)表示取出A1的Name列形成一个集合B1.(Name)表示取出B1的Name列。本案例的最终结果如下A3:result A2。这表示将计算结果输出到JDBC接口。A3可以和A2合为一步result [A1.(Name),B1.(Name)].isect() 。上述是求交集的过程求并集只需换个函数[A1.(Name),B1.(Name)].union()计算结果如下求差集的代码[A1.(Name),B1.(Name)].diff()计算结果如下还有一类特殊的集合算法和集即求并集时保留重复的元素和集的代码[A1.(Name),B1.(Name)].conj()计算结果如下可以直接用运算符来代替函数写法更加简洁比如交集并集、差集、合集可以改写为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()].mergei()[A1.(Name).sort(),B1.(Name).sort()].mergeu()[A1.(Name).sort(),B1.(Name).sort()].merged()函数merge还可以进行多字段的集合运算假设不同的Dept会存在相同的Name现在需要将Dept和Name当作一个整体来进行交集运算对应的代码如下[A1.sort(Dept,Name),B1.sort(Dept,Name)].mergei(Dept,Name) 。计算结果如下对于内存放不下的大文件可以用cursor函数来读取文件并用merge函数来实现集合运算。其中求交集的代码如下A1file(“e:\\f1.txt”).cursor()B1file(“e:\\f2.txt”).cursor()A2[ A1.sortx(Name),B1.sortx(Name)].mergexi(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();//获得计算结果