java 从hadoop hdfs读取文件 进行groupby并显示为条形图

该博客介绍了如何使用Java从Hadoop HDFS读取数据,进行GroupBy操作,并将统计结果以柱状图形式展示。首先,通过HDFS API读取数据,然后使用哈希表进行数据统计,包括计数、平均值和最大值。接着,遍历哈希表并打印统计结果,最后利用CategoryDataset生成柱状图,展示了不同分组的统计详情。
摘要由CSDN通过智能技术生成
  • 题意:从文件、网络或者数据库中读取数据(格式自定、数据自定),显示统计结果(包括图形两种以上),用户界面自定

有兴趣使用的,请点源代码与数据下载链接


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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值