I have a CSV file with thoose values
#BOF userID;gender;movieID;rating 1;m;100;50 1;m;101;100 1;m;102;0 2;f;100;100 2;f;101;80 3;m;104;70 4;m;104;80 5;f;100;75 #EOF
I want to know how many movies does each user rate? Assume that there are hundred thousands of users. I tried to coded it in Eclipse for Java. Used
while ((strLine = br.readLine()) != null) {
String[] strings = strLine.split(";");
but then stopped. I am new at this so probably looks easy, but not for me..yet:=)
JAVA缺乏相应的函数,直接实现分组汇总很麻烦,建议SPL辅助:
A | |
1 | =file("d:\\source.csv").read@n() |
2 | =A1.to(2,A1.len()-1) |
3 | =A2.concat("\n") |
4 | =A3.import@t(;";") |
5 | =A4.groups(userID;count(movieID)) |
A1: 读取source.csv中的内容, 返回成串序列,每行作为一个成员。
A2: 读取A1中第2行到倒数第2行的内容。
A3: 将序列成员以分隔符“\n”分隔拼成一个字符串。
A4: 用字符串中读出的内容作为记录并返回成序表。
A5: 按照userID进行分组聚合。
这段代码可以方便地集成进Java,参考Java 如何调用 SPL 脚本。