先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
解析格式很不规则的xls,SPL提供了xlscell函数,可以读写指定sheet里指定片区的数据,比如读取第1个sheet里的A2格:
=file(“d:/Orders.xlsx”).xlsopen().xlscell(“C2”)
配合SPL灵活的语法,就可以解析自由格式的xls,比如将下面的文件读为规范的二维表(序表):
这个文件格式很不规则,直接基于POI写Java代码是个浩大的工程,而SPL代码就简短得多:
A | B | C | |
1 | =create(ID,Name,Sex,Position,Birthday,Phone,Address,PostCode) | ||
2 | =file(“e:/excel/employe.xlsx”).xlsopen() | ||
3 | [C,C,F,C,C,D,C,C] | [1,2,2,3,4,5,7,8] | |
4 | for | =A3.(/B3(#)).(A2.xlscell()) | |
5 | if len(B4(1))==0 | break | |
6 | >A1.record(B4) | ||
7 | >B3=B3.(~+9) |
生成规则的行式xls,SPL提供了xlsexport函数,用法也很简单。比如,上面例子的解析结果是个序表,存在SPL的A1格中,下面将A1写入新xls的第一个sheet,首行为列名,只要一句代码:=file(“e:/result.xlsx”).xlsexport@t(A1)
xlsexport函数的功能丰富多样,可以将序表写入指定sheet,或只写入序表的部分行,或只写入指定的列:=file(“e:/scores.xlsx”).xlsexport@t(A1,No,Name,Class,Maths)
xlsexport函数还可以方便地追加数据,比如对于已经存在且有数据的xls,将序表A1追加到该文件末尾,外观风格与原文件末行保持一致:=file(“e:/scores.xlsx”).xlsexport@a(A1)
不规则片区写入数据,可以使用前面的xlscell函数。比如,xls中蓝色单元格是不规则的表头,需要在相应的白色单元格中填入数据,如下图:
直接用POI要大段冗长的代码,而SPL代码就简短许多:
A | B | C | D | E | F | |
1 | Mengniu Funds | 2017 | 3 | 58.2 | 364 | 300 |
2 | 8.5 | 50 | 200 | 100 | 400 | 200 |
3 | 182.6 | 76.3 | 43.7 | 28.5 | 16.4 | |
4 | 120 | 1.07 | 30 | 0.27 | 90 | 0.8 |
5 | 154 | 6 | 4 | |||
6 | =file(“e:/result.xlsx”) | =A6.xlsopen() | ||||
7 | =C6.xlscell(“B2”,1;A1) | =C6.xlscell(“J2”,1;B1) | =C6.xlscell(“L2”,1;C1) | |||
8 | =C6.xlscell(“B3”,1;D1) | =C6.xlscell(“G3”,1;E1) | =C6.xlscell(“K3”,1;F1) | |||
9 | =C6.xlscell(“B6”,1;[A2:F2].concat(“\t”)) | =C6.xlscell(“H6”,1;[A3:E3].concat(“\t”)) | ||||
10 | =C6.xlscell(“B9”,1;[A4:F4].concat(“\t”)) | =C6.xlscell(“B11”,1;[A5:C5].concat(“\t”)) | ||||
11 | =A6.xlswrite(B6) |
注意,第6、9、11行有连续单元格,SPL可以简化代码一起填入,POI只能依次填入。
SPL提供足够的查询计算能力
查询计算是Excel处理任务的重点,SPL提供了丰富的计算函数、字符串函数、日期函数,以及标准SQL语法,不仅支持日常的xls计算,也能计算内容不规则的xls和逻辑复杂的xls。
SPL提供了丰富的计算函数,可直接完成基础计算。比如前面的分组汇总,只要一句:
A1.groups(SellerId;sum(Amount))
更多计算:
条件查询:A1.select(Amount>1000 && Amount<=3000 && like(Client,“S”))
排序:A1.sort(Client,-Amount)"
去重:A1.id(Client)"
关联两个xlsx:join(T(“D:/Orders.xlsx”)😮,SellerId; T(“D:/Employees.xls”):E,EId).new(O.OrderID,O.Client,O.SellerId,O.Amount,O.OrderDate, E.Name,E.Gender,E.Dept)"
TopN:T(“D:/Orders.xls”).top(-3;Amount)
组内TopN (开窗函数):T(“D:/Orders.xls”).groups(Client;top(3,Amount))
SPL支持大量日期函数和字符串函数,代码量更短,开发效率更高。比如:
时间类函数,日期增减:elapse(“2020-02-27”,5) //返回2020-03-03
星期几:day@w(“2020-02-27”) //返回5,即星期4
N个工作日之后的日期:workday(date(“2022-01-01”),25) //返回2022-02-04
字符串类函数,判断是否全为数字:isdigit(“12345”) //返回true
取子串前面的字符串:substr@l(“abCDcdef”,“cd”) //返回abCD
按竖线拆成字符串数组:“aa|bb|cc”.split(“|”) //返回[“aa”,“bb”,“cc”]
SPL还支持年份增减、求年中第几天、求季度、按正则表达式拆分字符串、拆出SQL的where或select部分、拆出单词、按标记拆HTML等功能。
SPL提供了标准SQL语法,可以像对数据库表一样直接对xls文件进行查询,极大地降低了数据库程序员的学习门槛:
filter:
s
e
l
e
c
t
∗
f
r
o
m
d
:
/
s
O
r
d
e
r
.
x
l
s
x
w
h
e
r
e
C
l
i
e
n
t
l
i
k
e
′
select * from d:/sOrder.xlsx where Client like ‘%S%’ or (Amount>1000 and Amount<=2000)sort:
select∗fromd:/sOrder.xlsxwhereClientlike′select * from sales.xls order by Client,Amont descdistinct:$ select distinct(sellerid) from sales.xls group by…having:KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 98: …ing sum(amount)&̲gt;=2000000join…select e.name, s.orderdate, s.amount from sales.xls s left join employee.xlsx e on s.sellerid= e.eid
SPL支持SQL-92标准中大部分语法,包括集合计算、case when、with、嵌套子查询等,详见《没有 RDB 也敢揽 SQL 活的开源金刚钻 SPL》
内容不规则的xls,一般的类库都无能为力,SPL语法灵活函数丰富,可轻松解决处理。比如Excel单元格里有很多”key=value”形式的字符串,需要整理成规范的二维表,以进行后续计算:
A | |
1 | =file(“D:/data/keyvalue.xlsx”).xlsimport@w() |
2 | =A1.conj().(~.split(“=”)) |
3 | =A2.new((1),(2)) |
逻辑复杂的计算,SQL和存储过程都难以实现,SPL的计算能力更强,可轻松解决此类问题。比如,计算某支股票最长的连续上涨天数:
A | |
1 | =T(“d:/AAPL.xlsx”) |
2 | =a=0,A1.max(a=if(price>price[-1],a+1,0)) |
SPL支持更优的应用架构
SPL是解释型语言,提供JDBC接口,可以用SQL或存储过程的形式被JAVA集成,不仅降低了架构的耦合性,还能支持热切换。SPL还支持多种数据源,并支持跨数据源计算。
SPL提供了JDBC接口,可被JAVA轻松调用。简单的SPL代码可以像SQL一样,直接嵌入JAVA,比如条件查询:
Class.forName("com.esproc.jdbc.InternalDriver");
Connection connection =DriverManager.getConnection("jdbc:esproc:local://");
Statement statement = connection.createStatement();
String str="=T(\"D:/Orders.xls\").select(Amount>1000 && Amount<=3000 && like(Client,\"*S*\"))";
ResultSet result = statement.executeQuery(str);
SPL支持计算外置,可降低计算代码和前端应用的耦合性。复杂的SPL代码可以先存为脚本文件,再以存储过程的形式被JAVA调用:
Class.forName("com.esproc.jdbc.InternalDriver");
Connection conn =DriverManager.getConnection("jdbc:esproc:local://");
CallableStatement statement = conn.prepareCall("{call scriptFileName(?, ?)}");
statement.setObject(1, "2020-01-01");
statement.setObject(2, "2020-01-31");
statement.execute();
SPL是解释型语言,通过外置代码可实现热切换。解释型语言无须编译,修改后可立即执行,无须重启JAVA应用,可降低维护工作量,提高系统稳定性。
SPL支持多种文件数据源,除了xls外,SPL还能读写csv\txt\XML\Json等文件,比如对txt进行条件查询:
T(“sOrders.txt”).groups(SellerId;sum(Amount))
$select * from d:/sOrders.txt where Client like ‘%S%’ or (Amount>1000 and Amount<=2000)
SPL支持跨数据源计算,比如xls和txt的关联计算:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
sOrders.txt where Client like ‘%S%’ or (Amount>1000 and Amount<=2000)
SPL支持跨数据源计算,比如xls和txt的关联计算:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-m9vpKyXi-1713299607541)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!