一个大数据的demo

  1 package test.admin;
  2
  3 import java.io.BufferedReader;
  4 import java.io.BufferedWriter;
  5 import java.io.File;
  6 import java.io.FileFilter;
  7 import java.io.FileReader;
  8 import java.io.FileWriter;
  9 import java.util.ArrayList;
 10 import java.util.List;
 11 import java.util.Scanner;
 12
 13 public class Algorithm {
 14
 15     // 每列的和
 16     public static double one_row = 0,two_row = 0,three_row= 0,four_row=0,five_row=0,six_row=0;
 17     // 每列的除数
 18     public static double one_row_i = 0,two_row_i = 0,three_row_i=0,four_row_i=0,five_row_i=0,six_row_i=0;
 19     // 每列的结果
 20     public static double one_column = 0,two_column = 0,three_column= 0,four_column=0,five_column=0,six_column=0;
 21     // 读取txt计算(加法与除法)四种样式 最后的结果
 22     public static String one_style = "",two_style="",three_style="",four_style="";
 23
 24     // 每列的和
 25     public static double one_row_divisions = 0,two_row_divisions = 0,three_row_divisions= 0,four_row_divisions=0;
 26     // 每列的除数
 27     public static double one_row_j = 0,two_row_j = 0,three_row_j=0,four_row_j=0;
 28     // 读取txt计算(乘法与触发)四种样式 最后的结果
 29     public static String one_division = "",two_division="",three_division="",four_division="";
 30
 31     public static double one = 0,two=0,three=0,four=0,five=0,six=0;
 32
 33     public static double one_s = 0,two_s=0,three_s=0,four_s=0;
 34
 35     public static double one_i = 0,two_i=0,three_i=0,four_i=0,five_i=0,six_i=0;
 36
 37     static List<String> listArr=new ArrayList<String>();
 38     // 多个文件的集合
 39     static List<String> listAddArr=new ArrayList<String>();
 40
 41     static String[] retArr = new String[4];
 42     static String[] retOne = null;
 43     static String[] retTwo = null;
 44     static String[] retThree = null;
 45     static String[] retFour = null;
 46     static String[] divisionArr = null;
 47     static String[] divisionName = null;
 48     static String[] splitValue = null;
 49     static String value=null;
 50     static String lineValue="";
 51
 52     private static BufferedReader brf;
 53     private static FileWriter fw;
 54
 55     /**
 56      *  获取目录下的所有TXT文件
 57      */
 58     public static List<String> getFileList(File file) {
 59
 60         List<String> result = new ArrayList<String>();
 61
 62         if (!file.isDirectory()) {
 63             System.out.println(file.getAbsolutePath());
 64             result.add(file.getAbsolutePath());
 65         } else {
 66             File[] directoryList = file.listFiles(new FileFilter() {
 67                 public boolean accept(File file) {
 68                     if (file.isFile() && file.getName().indexOf("txt") > -1) {
 69                         return true;
 70                     } else {
 71                         return false;
 72                     }
 73                 }
 74             });
 75             for (int i = 0; i < directoryList.length; i++) {
 76                 result.add(directoryList[i].getPath());
 77             }
 78         }
 79
 80         return result;
 81     }
 82
 83     public static void main(String[] args) throws Exception {
 84             String centerValue="";
 85             int Js = 0;
 86             int Js_two = 0;
 87             System.out.print("请输入文件读取路径:");
 88             Scanner sc = new Scanner(System.in);
 89             String strv = sc.next();
 90             // 向量相加的 文件位置
 91             String FILE_IN = strv;
 92             File f = new File(FILE_IN);
 93             List<String> list = new ArrayList<String>();
 94             // 调用方法获取txt文件集合与路径
 95             list = getFileList(f);
 96             // 如果向量相加 目录下 有两个TXT文件 需要做第二次向量相加 操作
 97             retOne = new String[list.size()];
 98             retTwo = new String[list.size()];
 99             retThree = new String[list.size()];
100             retFour = new String[list.size()];
101             // 循环调用 目录下所有TXT文件
102             for (String l : list) {
103                     brf = new BufferedReader(new FileReader(new File(l)));
104                     String line = null;
105                     // 读取每一行 内容
106                     while ((line = brf.readLine()) != null) {
107                         String str = line.substring(line.length() - 9,
108                                 line.length());
109                         // 根据 四种分类不同做不同的操作
110                         if (str.equals("[1,0,0,0]")) {
111                             // 获取 第一种类型的 结果
112                             one_style = Algorithm.VectorAdd(line);
113                         } else if (str.equals("[0,1,0,0]")){
114                             // 获取 第二种类型的 结果
115                             two_style = Algorithm.VectorAdd(line);
116                         }else if (str.equals("[0,0,1,0]")){
117                             // 获取 第三种类型的 结果
118                             three_style = Algorithm.VectorAdd(line);
119                         }else if (str.equals("[0,0,0,1]")){
120                             // 获取 第四种类型的 结果
121                             four_style = Algorithm.VectorAdd(line);
122                         }
123                     }
124                     // 第二次向量相加并做除法的 集合
125                     retOne[Js] = one_style;
126                     retTwo[Js] = two_style;
127                     retThree[Js] = three_style;
128                     retFour[Js] = four_style;
129                     Js++;
130                     // 重置 one_style two_style 等 参数
131                     resetStyle();
132                     // 重置 one_row 等 参数
133                     resetParameters();
134                 }
135                 // 调用 第二个向量加法
136                 one_style = Algorithm.VectorAdds(retOne);
137                 // 重置 one_row 等 参数
138                 resetParameters();
139                 two_style = Algorithm.VectorAdds(retTwo);
140                 resetParameters();
141                 three_style = Algorithm.VectorAdds(retThree);
142                 resetParameters();
143                 four_style = Algorithm.VectorAdds(retFour);
144                 resetParameters();
145
146                 System.out.println(one_style+"===[1,0,0,0]");
147                 System.out.println(two_style+"===[0,1,0,0]");
148                 System.out.println(three_style+"===[0,0,1,0]");
149                 System.out.println(four_style+"===[0,0,0,1]");
150                 // 向量点乘 的集合
151                 retArr[0] = one_style;
152                 retArr[1] = two_style;
153                 retArr[2] = three_style;
154                 retArr[3] = four_style;
155
156                 System.out.print("请输入文件读取路径:");
157                 Scanner sc1 = new Scanner(System.in);
158                 String strv1 = sc1.next();
159                 // 向量点乘 的文件位置
160                 String FILE_INFO = strv1;
161                 File f1 = new File(FILE_INFO);
162                 List<String> list1 = new ArrayList<String>();
163                 // 调用方法获取txt文件集合与路径
164                 list1 = getFileList(f1);
165                 divisionArr = new String[list1.size()];
166                 divisionName = new String[list1.size()];
167                 for (int i = 0; i < list1.size(); i++) {
168                     String[] split = list1.get(i).split("\\\\");
169                     String txtName = split[split.length-1];
170                     divisionName[i] = txtName.substring(0, txtName.length()-4);
171                 }
172                 for (String l1 : list1) {
173                     brf = new BufferedReader(new FileReader(new File(l1)));
174                     String line = null;
175                     // 读取每一行内容
176                     while ((line = brf.readLine()) != null) {
177                         //调用点乘方法
178                         one_division = Algorithm.VectorDivision(line,retArr);
179                         centerValue+=one_division;
180                     }
181
182                     centerValue = centerValue.substring(0,centerValue.length()-6);
183                     divisionArr[Js_two]=centerValue;
184                     centerValue="";
185                     Js_two++;
186                 }
187                 // 向量点乘结果  做向量加法
188                 for (int i = 0; i < divisionArr.length; i++) {
189                     value = divisionArr[i];
190                     splitValue = value.split("\\[diff\\]");
191                     value = value.substring(value.length());
192                     for (int j = 0; j < splitValue.length; j++) {
193                         String oneArr = splitValue[j];
194                         String[] split = oneArr.split(",");
195                         for (int n = 0; n < split.length; n++) {
196                             // 取值
197                             double values = Double.valueOf(split[n]).doubleValue();
198                             if(n==0){
199                                 one_row_divisions +=values;
200                                 one_row_j++;
201                             } else if (n==1) {
202                                 two_row_divisions +=values;
203                                 two_row_j++;
204                             } else if (n==2){
205                                 three_row_divisions +=values;
206                                 three_row_j++;
207                             } else if (n==3){
208                                 four_row_divisions+=values;
209                                 four_row_j++;
210                             }
211                         }
212                     }
213
214                 one_row_divisions = one_row_divisions / one_row_j;
215                 two_row_divisions = two_row_divisions / two_row_j;
216                 three_row_divisions = three_row_divisions / three_row_j;
217                 four_row_divisions = four_row_divisions / four_row_j;
218                 //打印最终结果
219                 System.out.println(one_row_divisions+","+two_row_divisions+","+three_row_divisions+","+four_row_divisions);
220                 one_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/one_row_divisions;
221                 two_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/two_row_divisions;
222                 three_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/three_row_divisions;
223                 four_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/four_row_divisions;
224                 lineValue+="["+divisionName[i]+"]["+one_s+","+two_s+","+three_s+","+four_s+"]\r\n";;
225                 resetStyle();
226                 }
227                 System.out.print("请输入文件输出路径:");
228                 Scanner sc2 = new Scanner(System.in);
229                 String strv2 = sc2.next();
230                 fw = new FileWriter(strv2+"\\file.txt");
231                 BufferedWriter bf = new BufferedWriter(fw);
232                 bf.write(lineValue);
233                 bf.flush();
234     }
235
236
237     /**
238      * 向量点乘方法
239      */
240     private static String VectorDivision(String line, String[] addArr) {
241         double one_row_division=0;
242         double two_row_division=0;
243         double three_row_division=0;
244         double four_row_division=0;
245         String ret="";
246         String[] strArr = line.split("\\]\\[");
247         String subs = strArr[1].substring(0, strArr[1].length()-1);
248         String[] split = subs.split(",");
249         for (int i = 0; i < addArr.length; i++) {
250             String[] split2 = addArr[i].split(",");
251             for (int j = 0; j < split2.length; j++) {
252                 double file2value = Double.valueOf(split[j]).doubleValue();
253                 double one_style2value = Double.valueOf(split2[j]).doubleValue();
254                 if(i==0){
255                     one_row_division += file2value*one_style2value;
256                 } else if(i==1){
257                     two_row_division += file2value*one_style2value;
258                 } else if(i==2){
259                     three_row_division += file2value*one_style2value;
260                 } else if(i==3){
261                     four_row_division += file2value*one_style2value;
262                 }
263             }
264         }
265         ret=one_row_division+","+two_row_division+","+three_row_division+","+four_row_division+"[diff]";
266         return ret;
267     }
268
269     /**
270      * 向量加法
271      */
272     static String VectorAdd(String line) {
273
274         String[] strArr = line.split("\\]\\[");
275
276         String[] numArr = strArr[1].split(",");
277         for (int i = 0; i < numArr.length; i++) {
278             double doubleValue = Double.valueOf(numArr[i]).doubleValue();
279             if(i==0){
280                 one_row +=doubleValue;
281                 one_row_i++;
282             } else if (i==1) {
283                 two_row +=doubleValue;
284                 two_row_i++;
285             } else if (i==2){
286                 three_row +=doubleValue;
287                 three_row_i++;
288             } else if (i==3){
289                 four_row+=doubleValue;
290                 four_row_i++;
291             } else if (i==4){
292                 five_row+=doubleValue;
293                 five_row_i++;
294             } else if (i==5){
295                 six_row+=doubleValue;
296                 six_row_i++;
297             }
298
299         }
300         one_column = one_row / one_row_i;
301         two_column = two_row / two_row_i;
302         three_column = three_row / three_row_i;
303         four_column = four_row / four_row_i;
304         five_column = five_row / five_row_i;
305         six_column = six_row / six_row_i;
306         String  result = one_column+","+two_column+","+three_column+","+four_column+","+five_column+","+six_column;
307         return result;
308     }
309     /**
310      * 两个TXT文件调用向量加法
311      */
312     static String VectorAdds(String[] line) {
313         for (int i = 0; i < line.length; i++) {
314             if(line[i]!=""){
315                 String[] split = line[i].split(",");
316                 for (int j = 0; j < split.length; j++) {
317                     // 取值
318                     double value = Double.valueOf(split[j]).doubleValue();
319                     if(j==0){
320                         one +=value;
321                         one_i++;
322                     } else if (j==1) {
323                         two +=value;
324                         two_i++;
325                     } else if (j==2){
326                         three +=value;
327                         three_i++;
328                     } else if (j==3){
329                         four+=value;
330                         four_i++;
331                     } else if (j==4){
332                         five+=value;
333                         five_i++;
334                     } else if (j==5){
335                         six+=value;
336                         six_i++;
337                     }
338                 }
339             }
340         }
341
342         one_column = one / one_i;
343         two_column = two / two_i;
344         three_column = three / three_i;
345         four_column = four / four_i;
346         five_column = five / five_i;
347         six_column = six / six_i;
348         String  result = one_column+","+two_column+","+three_column+","+four_column+","+five_column+","+six_column;
349         return result;
350     }
351
352     /**
353      * 重置参数
354      * @return
355      */
356     static void resetParameters() {
357         one_row_i = 0;
358         two_row_i = 0;
359         three_row_i=0;
360         four_row_i=0;
361         five_row_i=0;
362         six_row_i=0;
363         one_row = 0;
364         two_row = 0;
365         three_row=0;
366         four_row=0;
367         five_row=0;
368         six_row=0;
369         one_i = 0;
370         two_i = 0;
371         three_i=0;
372         four_i=0;
373         five_i=0;
374         six_i=0;
375         one = 0;
376         two = 0;
377         three=0;
378         four=0;
379         five=0;
380         six=0;
381     }
382
383     /**
384      * 重置参数
385      * @return
386      */
387     static void resetStyle(){
388         splitValue=null;
389         value=null;
390         one_style="";
391         two_style="";
392         three_style="";
393         four_style="";
394         one_row_divisions=0;
395         two_row_divisions=0;
396         three_row_divisions=0;
397         four_row_divisions=0;
398         one_row_j=0;
399         two_row_j=0;
400         three_row_j=0;
401         four_row_j=0;
402     }
403
404 }

第一个文件路径 是计算向量相加(最后一个[]中  数据想通的做相加)

第二个文件路径 是计算向量点乘

第三个文件路径  是输出结果!

时间: 2024-08-07 03:22:48

一个大数据的demo的相关文章

oracle 的一个大数据表 快速迁移到 Sqlserver2008数据库

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> oracle 的一个大数据表 快速迁移到 Sqlserver2008数据库 - HappyBinhaer的专栏 - 博客频道 - CSDN.NET HappyBinhaer的专栏 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯

大数据架构和模式(二)——如何知道一个大数据解决方案是否适合您的组织

简介 在确定投资大数据解决方案之前,评估可用于分析的数据:通过分析这些数据而获得的洞察:以及可用于定义.设计.创建和部署大数据平台的资源.询问正确的问题是一个不错的起点.使用本文中的问题将指导您完成调查.答案将揭示该数据和您尝试解决的问题的更多特征. 尽管组织一般情况对需要分析的数据类型有一些模糊的理解,但具体的细节很可能并不清晰.毕竟,数据可能具有之前未发现的模式的关键,一旦识别了一种模式,对额外分析的需求就会变得很明显.要帮助揭示这些未知的未知信息,首先需要实现一些基本用例,在此过程中,可以

大数据架构和模式(二)如何知道一个大数据解决方案是否适合您的组织

本文收藏于http://kb.cnblogs.com/page/510979/ 作者: Divakar等  来源: DeveloperWorks  发布时间: 2015-01-29 18:20  阅读: 1542 次  推荐: 0   原文链接   [收藏] 摘要:本文介绍一种评估大数据解决方案的可行性的基于维度的方法.通过回答探索每个维度的问题,您可以通过自己对环境的了解来确定某个大数据解决方案对您是否适合.仔细考虑每个维度,就会发现有关是否到了改进您的大数据服务的时候的线索. 简介 在确定投

如何成为一个大数据工程师? 学习路线图是什么?

看到很多小伙伴都在学习大数据开发的路上很迷茫,不知道该如何成为一名合格的大数据开发工程师,也不知道该学习哪些技术,下面就给大家谈谈如何成为一个大数据开发工程师! 想要成为大数据工程师,首先要更新自己的技术库,也就是说需要将自己以前学习的技术知识找回来,还要增加一些大数据专业技术知识,先让自己对大数据技术有一个基本的概念,然后再继续深入学习! 阶段一.大数据基础--java语言基础方面 (1)Java语言基础 Java开发介绍.熟悉Eclipse开发工具.Java语言基础.Java流程控制.Jav

你和高考状元之间隔了一个大数据的距离

最近网络被各省的高考状元们给刷屏了,都说高考是场全民的狂欢可一点儿没错.有高考的孩子,全家都"不得安宁",备考.考试.查成绩.志愿填报每一项都是"重大工程". 既然各省的高考状元都出来了,科多就放出来和大家一起看看,这是你心中学霸的样子吗? 左图为四川理科状元谢畅:右图为四川文科状元刘代蕾 贵州理科裸分状元周炜迪(右)和班主任:右图:贵州文科裸分状元林中文. 浙江理科状元张振宇:右图:浙江文科状元王至纯. 等一下,怎么听到无数心碎的声音?仿佛在说:童话故事里都是骗人

一个大数据平台省了20个IT人力——敦奴数据平台建设案例分享

认识敦奴 敦奴集团创立于1987年,主营服装.酒店.地产,总部位于中国皮都-海宁.浙江敦奴联合实业股份有限公司(以下简称"敦奴")是一家集开发.设计.生产.销售于一体的大型专业服装企业.敦奴拥有上海.海宁两个研发运营中心,旗下有DUNNU,DDU,DIDIER PARAKIAN三大品牌,销售网络遍及全国各地,在全国范围500家连锁店.敦奴拥有80000多平方米的服装生产基地,现有员工2000多人.2016年,敦奴服装业务的营业额为十几个亿. 大数据平台曲折路 从2013年敦奴开始筹建大

炒股App:又一个大数据丢在风口上的蛋

尽管炒股App处于刚刚勃兴阶段,但业内几乎在短时间内迅速就其产品模式达成了共识--将交易与交流相结合,组建日常化的投资社区.在此之下,不同背景与定位的炒股App开始探索各自的商业模式,谋求符合自己的生存之道 ... 文/张书乐 本文刊载于<销售与市场>杂志评论版2015年08期 据媒体报道,与2007年"大牛市"不同,2014年以来的大牛市伴随移动互联网的蓬勃发展,特别是微信.移动新闻客户端等加快了信息传播速度.2007年时,股票投资者还需要在同花顺.大智慧等PC客户端浏览

从实际需求出发----笑谈一个大数据应用

原始文章,如转载,请注明出处! 这是我在北航大数据同学群里转的一个笑话: 从这里看到,从实际的需求出发,才能让产品功能完善.如果天天将产品功能定位在天上,或觉得自己牛到我做出来的产品就是让别人适应的(比如IPHONE的最初设计),那可能最终的结果就是你没那实力,别人不能适应你.

用Python实现一个大数据搜索及源代码

在日常生活中,大家了解搜索引擎如百度.360.搜狗.谷歌等,搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器(BloomFilter) 第一步我们先要实现一个布隆过滤器. 布隆过滤器是大数据领域的一个常见算法,它的目的是过滤掉那些不是目标的元素.也就是说如果一个要搜索的词并不存在与我的数据中,那么它可以以很快的速度返回目标不存在. 让我们看看以下