- 题意:从文件、网络或者数据库中读取数据(格式自定、数据自定),显示统计结果(包括图形两种以上),用户界面自定
有兴趣使用的,请点源代码与数据下载链接
1 读取数据
1.1 准备数据
此数据为TPCH基准测试集中lineitem.tdl文件中前25行
示例:第一行如下
1|1552|93|1|17|24710.35|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVERIN PERSON|TRUCK|egular courts above the|
其中有15列,分别以“|”隔开
- 第0列:1
- 第1列:1552
- 第2列:93
- 第n列:…
全部数据截图如下:
1.2 将数据存入HDFS:
文件系统:HDFS全名为hadoop Distributed File System,是google File system的开源实现,是一种基于java的应用层文件系统,与hadoop捆绑在一起。HDFS设计成能可靠地在集群中大量机器之间存储大量的文件,它以块序列的形式存储文件。
在hadoop集群开启的情况下,使用以下命令将数据存储在hadoop hdfs文件系统的JVdata文件夹中。
#hadoop fs –copyFromLocal statistics.tbl ./JVdata
1.3 读取数据
使用hdfs的API读取数据流,in.readline为按行读取数据。
“hdfs://localhost:9000/文件路径”为hadoop中地址,需要与${HADOOP_HOME}/etc/Hadoop/core-site.xml设置文件中保持一致
<property>
<name>fs.defaultFS</name>
<value>hdfs://104.128.92.12:9000</value>
</property>
public class HDFSTest {
public static void main(String[] args) throws IOException, URISyntaxException{
String file= “hdfs://localhost:9000/文件路径";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(file), conf);
Path path = new Path(file);
FSDataInputStream in_stream = fs.open(path);
BufferedReader in = new BufferedReader(new InputStreamReader(in_stream));
String s;
while ((s=in.readLine())!=null) {
System.out.println(s);
}
in.close();
fs.close();
}
}
2.统计数据
2.1 使用hashtable键值对方法统计数据
本工程分别对分组数据进行count,求平均avg,求最大值max处理,所以hashtable中键为分组统计的关键字,值有三个,所以此处自定义一个class,便于构建一键多值的hashtable.
class Hw1{
public int count ;
public double avg;
public double max;
public Hw1(int count,double avg,double max){
this.count=count;
this.avg=avg;
this.max=max;
}
public int hashCode(){
return (String.valueOf(count)+String.valueOf(avg)+String.valueOf(max)).hashCode();
}
public String toString(){
return String.valueOf(count)+String.valueOf(avg)+String.v