Java 有什么开源包能做查询统计的?

本文由 简悦 SimpRead 转码, 原文地址 www.zhihu.com https://pica.zhimg.com/v2-b104510ba1b8db36658cc86237ff5a32_xs.jpg?source=1940ef5cscudata

做查询统计的开源包,Python 上有著名的 Pandas,JAVA 上自然就有大批模仿者,其中 Tablesaw 和 Joinery 比较有名,但成熟度、计算能力、函数丰富程度等方面都远不如 Pandas,而且改了还得编译(Pandas 和 SQL 就不用)。如果不怕麻烦且数据量小,倒不如在 SQLite 里建表、读源数据、导入数据,然后用 SQL 做查询统计,全程可以都可以用 JAVA 实现。

纯 Java 的开源包,集算器 SPL 比 SQLite 好用多了,而且不麻烦。

SPL 的接口是 JDBC,程序员看一遍就能学会,比如对 Orders.txt 进行条件查询:

1
2
3
4
5
6
7
Class.forName("com.esproc.jdbc.InternalDriver");
Connection connection =DriverManager.getConnection("jdbc:esproc:local://");
Statement statement = connection.createStatement();
String str="=T(\"D:/data/Orders.txt\").select(Amount>1000 && Amount<=3000 && like(Client,\"*S*\"))";
ResultSet result = statement.executeQuery(str);

SPL 做查询统计很方便,除了条件查询,还提供了大量的基本计算函数,比如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
排序
str ="=T(\"D:/data/Orders.txt\").sort(Client,-Amount)";

去重
str="=T(\"D:/data/Orders.txt\").id(Client)";

分组汇总
str ="=T(\"D:/data/Orders.txt\").groups(year(OrderDate);sum(Amount))";

关联
str ="=join(T (\"D:/data/Orders.txt\"):O,SellerId; T(\"D:/data/Employees.txt\"):E,EId).new(O.OrderID,O.Client,O.SellerId,O.Amount,O.OrderDate,   E.Name,E.Gender,E.Dept)";

为了方便数据库程序员,集算器也提供了对应的 SQL 语法,比如分组汇总也可以写作下面这样:

1
str="$SELECT  year(OrderDate),sum(Amount) from Orders.txt group by year(OrderDate)"

SPL 支持多种数据源,除了上面的文本文件,还支持数据库、Excel、各类 NoSQL、Restful 等。

SPL 脚本可以像上面那样内嵌于 JAVA 代码(类似 SQL);遇到步骤较多,可能频繁修改,需要降低的运算​**耦合性,SPL 脚本也可以外置于脚本文件**(类似存储过程)。比如:在各部门找出比本部门平均年龄小的员工。先将 SPL 脚本存为文件:

A
1 =T(“Employee.csv”)
2 =A1.group(DEPT; (a=.avg(age(BIRTHDAY)),.select(age(BIRTHDAY)<a)):YOUNG)
3 =A2.conj(YOUNG)

再在 JAVA 代码中以存储过程的方式调用脚本文件:

1
2
3
4
5
6
Class.forName("com.esproc.jdbc.InternalDriver");
Connection connection =DriverManager.getConnection("jdbc:esproc:local://");
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("call getYoung()");    
...

有些运算逻辑比较复杂,用数据库存储过程都很难写,而 SPL 提供了更丰富的计算函数和语法,可以大幅简化复杂运算逻辑。比如:计算某支股票最长的连续上涨天数,SPL 只需两行:

A B
1 =T(“d:/AAPL.xlsx”) 读 Excel 文件,首行为列名
2 =a=0,A1.max(a=if(price>price[-1],a+1,0)) 求最长连续上涨天数

外置的脚本文件可以用 SPL 专用的 IDE 进行编辑调试,不仅具备完整调试功能,还能随时观察每一步的计算结果,特别适合设计逻辑更复杂的计算:

https://pic1.zhimg.com/v2-7dfcd070b26b261852d51e3820419cee_r.jpg?source=1940ef5c

在查询统计方面,集算器 SPL 明显比其它开源包更胜一筹,在数据源种类、跨源计算、大数据和并行计算等方面,集算器 SPL 也均有出色表现,这里不再详细展开。

https://pic2.zhimg.com/v2-833ed68f764c01aab6d0800b58c88c97_xs.jpg?source=1940ef5c编程百宝库

给大家分享我收藏的教务管理系统自学 zi 料,以及开发工具和练手源码,价值上 w,希望能帮到你

图片上所有的都可以无偿领取哦。

目的希望能帮到对 Java 以及 Web 前端感兴趣想自学的朋友!

在编程语言中 Web 前端和 Java 真的都算是一门很好的编程语言! 无论是应用在生活中还是作为一门职业来说,前景还是算比较不错的。

计算机毕业设计 [源码 + 课件] 基于 Java 开发实现的教务查询系统_Java 入门_教务查询项目_Java 实战项目_哔哩哔哩_bilibili

一般的服务器都需要线程池,比如 Web、FTP 等服务器,不过它们一般都自己实现了线程池,比如以前介绍过的 Tomcat、Resin 和 Jetty 等,现在有了 JDK5,我们就没有必要重复造车轮了,直接使用就可以,何况使用也很方便,性能也非常高。

  package concurrent;

  import java.util.concurrent.ExecutorService;

  import java.util.concurrent.Executors;

  public class TestThreadPool {

  public static void main(String args[]) throws InterruptedException {

  // only two threads

  ExecutorService exec = Executors.newFixedThreadPool(2);

for (int index = 0; index < 100; index++) {

  Runnable run = new Runnable() {

  public void run() {

  long time = (long) (Math.random() * 1000);

  System.out.println(“Sleeping” + time + “ms”);

  try {

  Thread.sleep(time);

  } catch (InterruptedException e) {

  }

  }

  };

  exec.execute(run);

// must shutdown

  exec.shutdown();

  }

  }

这是一个例子, 感兴趣可以评论区留言!

https://picx.zhimg.com/v2-7b2b6e2c1ccf087264a29aca7a163ae2_xs.jpg?source=1940ef5c御坂 10032

Flink Spark 这种算吗?(逃~)