package test.admin;

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class Algorithm { // 每列的和
public static double one_row = 0,two_row = 0,three_row= 0,four_row=0,five_row=0,six_row=0;
// 每列的除数
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;
// 每列的结果
public static double one_column = 0,two_column = 0,three_column= 0,four_column=0,five_column=0,six_column=0;
// 读取txt计算(加法与除法)四种样式 最后的结果
public static String one_style = "",two_style="",three_style="",four_style=""; // 每列的和
public static double one_row_divisions = 0,two_row_divisions = 0,three_row_divisions= 0,four_row_divisions=0;
// 每列的除数
public static double one_row_j = 0,two_row_j = 0,three_row_j=0,four_row_j=0;
// 读取txt计算(乘法与触发)四种样式 最后的结果
public static String one_division = "",two_division="",three_division="",four_division=""; public static double one = 0,two=0,three=0,four=0,five=0,six=0; public static double one_s = 0,two_s=0,three_s=0,four_s=0; public static double one_i = 0,two_i=0,three_i=0,four_i=0,five_i=0,six_i=0; static List<String> listArr=new ArrayList<String>();
// 多个文件的集合
static List<String> listAddArr=new ArrayList<String>(); static String[] retArr = new String[4];
static String[] retOne = null;
static String[] retTwo = null;
static String[] retThree = null;
static String[] retFour = null;
static String[] divisionArr = null;
static String[] divisionName = null;
static String[] splitValue = null;
static String value=null;
static String lineValue=""; private static BufferedReader brf;
private static FileWriter fw; /**
* 获取目录下的所有TXT文件
*/
public static List<String> getFileList(File file) { List<String> result = new ArrayList<String>(); if (!file.isDirectory()) {
System.out.println(file.getAbsolutePath());
result.add(file.getAbsolutePath());
} else {
File[] directoryList = file.listFiles(new FileFilter() {
public boolean accept(File file) {
if (file.isFile() && file.getName().indexOf("txt") > -1) {
return true;
} else {
return false;
}
}
});
for (int i = 0; i < directoryList.length; i++) {
result.add(directoryList[i].getPath());
}
} return result;
} public static void main(String[] args) throws Exception {
String centerValue="";
int Js = 0;
int Js_two = 0;
System.out.print("请输入文件读取路径:");
Scanner sc = new Scanner(System.in);
String strv = sc.next();
// 向量相加的 文件位置
String FILE_IN = strv;
File f = new File(FILE_IN);
List<String> list = new ArrayList<String>();
// 调用方法获取txt文件集合与路径
list = getFileList(f);
// 如果向量相加 目录下 有两个TXT文件 需要做第二次向量相加 操作
retOne = new String[list.size()];
retTwo = new String[list.size()];
retThree = new String[list.size()];
retFour = new String[list.size()];
// 循环调用 目录下所有TXT文件
for (String l : list) {
brf = new BufferedReader(new FileReader(new File(l)));
String line = null;
// 读取每一行 内容
while ((line = brf.readLine()) != null) {
String str = line.substring(line.length() - 9,
line.length());
// 根据 四种分类不同做不同的操作
if (str.equals("[1,0,0,0]")) {
// 获取 第一种类型的 结果
one_style = Algorithm.VectorAdd(line);
} else if (str.equals("[0,1,0,0]")){
// 获取 第二种类型的 结果
two_style = Algorithm.VectorAdd(line);
}else if (str.equals("[0,0,1,0]")){
// 获取 第三种类型的 结果
three_style = Algorithm.VectorAdd(line);
}else if (str.equals("[0,0,0,1]")){
// 获取 第四种类型的 结果
four_style = Algorithm.VectorAdd(line);
}
}
// 第二次向量相加并做除法的 集合
retOne[Js] = one_style;
retTwo[Js] = two_style;
retThree[Js] = three_style;
retFour[Js] = four_style;
Js++;
// 重置 one_style two_style 等 参数
resetStyle();
// 重置 one_row 等 参数
resetParameters();
}
// 调用 第二个向量加法
one_style = Algorithm.VectorAdds(retOne);
// 重置 one_row 等 参数
resetParameters();
two_style = Algorithm.VectorAdds(retTwo);
resetParameters();
three_style = Algorithm.VectorAdds(retThree);
resetParameters();
four_style = Algorithm.VectorAdds(retFour);
resetParameters(); System.out.println(one_style+"===[1,0,0,0]");
System.out.println(two_style+"===[0,1,0,0]");
System.out.println(three_style+"===[0,0,1,0]");
System.out.println(four_style+"===[0,0,0,1]");
// 向量点乘 的集合
retArr[0] = one_style;
retArr[1] = two_style;
retArr[2] = three_style;
retArr[3] = four_style; System.out.print("请输入文件读取路径:");
Scanner sc1 = new Scanner(System.in);
String strv1 = sc1.next();
// 向量点乘 的文件位置
String FILE_INFO = strv1;
File f1 = new File(FILE_INFO);
List<String> list1 = new ArrayList<String>();
// 调用方法获取txt文件集合与路径
list1 = getFileList(f1);
divisionArr = new String[list1.size()];
divisionName = new String[list1.size()];
for (int i = 0; i < list1.size(); i++) {
String[] split = list1.get(i).split("\\\\");
String txtName = split[split.length-1];
divisionName[i] = txtName.substring(0, txtName.length()-4);
}
for (String l1 : list1) {
brf = new BufferedReader(new FileReader(new File(l1)));
String line = null;
// 读取每一行内容
while ((line = brf.readLine()) != null) {
//调用点乘方法
one_division = Algorithm.VectorDivision(line,retArr);
centerValue+=one_division;
} centerValue = centerValue.substring(0,centerValue.length()-6);
divisionArr[Js_two]=centerValue;
centerValue="";
Js_two++;
}
// 向量点乘结果 做向量加法
for (int i = 0; i < divisionArr.length; i++) {
value = divisionArr[i];
splitValue = value.split("\\[diff\\]");
value = value.substring(value.length());
for (int j = 0; j < splitValue.length; j++) {
String oneArr = splitValue[j];
String[] split = oneArr.split(",");
for (int n = 0; n < split.length; n++) {
// 取值
double values = Double.valueOf(split[n]).doubleValue();
if(n==0){
one_row_divisions +=values;
one_row_j++;
} else if (n==1) {
two_row_divisions +=values;
two_row_j++;
} else if (n==2){
three_row_divisions +=values;
three_row_j++;
} else if (n==3){
four_row_divisions+=values;
four_row_j++;
}
}
} one_row_divisions = one_row_divisions / one_row_j;
two_row_divisions = two_row_divisions / two_row_j;
three_row_divisions = three_row_divisions / three_row_j;
four_row_divisions = four_row_divisions / four_row_j;
//打印最终结果
System.out.println(one_row_divisions+","+two_row_divisions+","+three_row_divisions+","+four_row_divisions);
one_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/one_row_divisions;
two_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/two_row_divisions;
three_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/three_row_divisions;
four_s = (one_row_divisions+two_row_divisions+two_row_divisions+four_row_divisions)/four_row_divisions;
lineValue+="["+divisionName[i]+"]["+one_s+","+two_s+","+three_s+","+four_s+"]\r\n";;
resetStyle();
}
System.out.print("请输入文件输出路径:");
Scanner sc2 = new Scanner(System.in);
String strv2 = sc2.next();
fw = new FileWriter(strv2+"\\file.txt");
BufferedWriter bf = new BufferedWriter(fw);
bf.write(lineValue);
bf.flush();
} /**
* 向量点乘方法
*/
private static String VectorDivision(String line, String[] addArr) {
double one_row_division=0;
double two_row_division=0;
double three_row_division=0;
double four_row_division=0;
String ret="";
String[] strArr = line.split("\\]\\[");
String subs = strArr[1].substring(0, strArr[1].length()-1);
String[] split = subs.split(",");
for (int i = 0; i < addArr.length; i++) {
String[] split2 = addArr[i].split(",");
for (int j = 0; j < split2.length; j++) {
double file2value = Double.valueOf(split[j]).doubleValue();
double one_style2value = Double.valueOf(split2[j]).doubleValue();
if(i==0){
one_row_division += file2value*one_style2value;
} else if(i==1){
two_row_division += file2value*one_style2value;
} else if(i==2){
three_row_division += file2value*one_style2value;
} else if(i==3){
four_row_division += file2value*one_style2value;
}
}
}
ret=one_row_division+","+two_row_division+","+three_row_division+","+four_row_division+"[diff]";
return ret;
} /**
* 向量加法
*/
static String VectorAdd(String line) { String[] strArr = line.split("\\]\\["); String[] numArr = strArr[1].split(",");
for (int i = 0; i < numArr.length; i++) {
double doubleValue = Double.valueOf(numArr[i]).doubleValue();
if(i==0){
one_row +=doubleValue;
one_row_i++;
} else if (i==1) {
two_row +=doubleValue;
two_row_i++;
} else if (i==2){
three_row +=doubleValue;
three_row_i++;
} else if (i==3){
four_row+=doubleValue;
four_row_i++;
} else if (i==4){
five_row+=doubleValue;
five_row_i++;
} else if (i==5){
six_row+=doubleValue;
six_row_i++;
} }
one_column = one_row / one_row_i;
two_column = two_row / two_row_i;
three_column = three_row / three_row_i;
four_column = four_row / four_row_i;
five_column = five_row / five_row_i;
six_column = six_row / six_row_i;
String result = one_column+","+two_column+","+three_column+","+four_column+","+five_column+","+six_column;
return result;
}
/**
* 两个TXT文件调用向量加法
*/
static String VectorAdds(String[] line) {
for (int i = 0; i < line.length; i++) {
if(line[i]!=""){
String[] split = line[i].split(",");
for (int j = 0; j < split.length; j++) {
// 取值
double value = Double.valueOf(split[j]).doubleValue();
if(j==0){
one +=value;
one_i++;
} else if (j==1) {
two +=value;
two_i++;
} else if (j==2){
three +=value;
three_i++;
} else if (j==3){
four+=value;
four_i++;
} else if (j==4){
five+=value;
five_i++;
} else if (j==5){
six+=value;
six_i++;
}
}
}
} one_column = one / one_i;
two_column = two / two_i;
three_column = three / three_i;
four_column = four / four_i;
five_column = five / five_i;
six_column = six / six_i;
String result = one_column+","+two_column+","+three_column+","+four_column+","+five_column+","+six_column;
return result;
} /**
* 重置参数
* @return
*/
static void resetParameters() {
one_row_i = 0;
two_row_i = 0;
three_row_i=0;
four_row_i=0;
five_row_i=0;
six_row_i=0;
one_row = 0;
two_row = 0;
three_row=0;
four_row=0;
five_row=0;
six_row=0;
one_i = 0;
two_i = 0;
three_i=0;
four_i=0;
five_i=0;
six_i=0;
one = 0;
two = 0;
three=0;
four=0;
five=0;
six=0;
} /**
* 重置参数
* @return
*/
static void resetStyle(){
splitValue=null;
value=null;
one_style="";
two_style="";
three_style="";
four_style="";
one_row_divisions=0;
two_row_divisions=0;
three_row_divisions=0;
four_row_divisions=0;
one_row_j=0;
two_row_j=0;
three_row_j=0;
four_row_j=0;
} }

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

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

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

转载请注明出处!谢谢!

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

  1. 如何基于Go搭建一个大数据平台

    如何基于Go搭建一个大数据平台 - Go中国 - CSDN博客 https://blog.csdn.net/ra681t58cjxsgckj31/article/details/78333775 01 ...

  2. 用Python实现一个大数据搜索引擎

    用Python实现一个大数据搜索引擎 搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家 ...

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

    认识敦奴 敦奴集团创立于1987年,主营服装.酒店.地产,总部位于中国皮都-海宁.浙江敦奴联合实业股份有限公司(以下简称"敦奴")是一家集开发.设计.生产.销售于一体的大型专业服装 ...

  4. 用 Python 实现一个大数据搜索引擎

    搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理. 布隆过滤器 ...

  5. 如何做一个大数据seo人员

    作为流量运营者或者SEO人员,对于所从事行业领域的认识往往建立在一种直觉之上,我们很难对一个行业有一个全面的了解,这个行业领域有多宽,流量聚焦在哪里,那些是用户最关心的问题? 有的时候很难准确的把握, ...

  6. 一个大数据方案:基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...

  7. PHPExcel 大数据的导出

    PHPExcel 是一个php语言读取导出数据.导入生成Excel的类库,使用起来非常方便,但有时会遇到以些问题,比如导出的数据超时,内存溢出等. 下面我们来说说这些问题和解决办法. PHPExcel ...

  8. 为什么说LAXCUS颠覆了我的大数据使用体验

    切入正题前,先做个自我介绍. 本人是从业三年的大数据小码农一枚,在帝都一家有点名气的广告公司工作,同时兼着大数据管理员的职责. 平时主要的工作是配合业务部门,做各种广告大数据计算分析工作,然后制成各种 ...

  9. AI加持的阿里云飞天大数据平台技术揭秘

    摘要:2019云栖大会大数据&AI专场,阿里云智能计算平台事业部研究员关涛.资深专家徐晟来为我们分享<AI加持的阿里云飞天大数据平台技术揭秘>.本文主要讲了三大部分,一是原创技术优 ...

随机推荐

  1. ssh 无密码登陆

    ssh -i littlesuccess-aws.pem root@172.31.36.91 "cat >> ~/.ssh/authorized_keys" < ...

  2. selenium+python环境搭建

    1.安装python-2.7.3.msi 2.安装pywin32-216.win32-py2.7.exe 3.下selenium包,selenium-2.35.0.tar.gz,放到D:\autote ...

  3. Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...

  4. zip压缩命令的使用

    file命令可以查看文件的类型 tar类型 .tar gzip类型   .gz  bzip2类型  .bz2 zip类型    .zip 如果一个压缩文件由tar命令解压的前提,2个条件 1.这个文件 ...

  5. vs2012 opencv 配置

    一直没有学习C++,以为该语言太过old,所以要学习新的咚咚.一番学习归来,在进行OpenCV的时候,还是要用到这个C++.几次琢磨,终于能够配置好相关的开发环境和问题初步处理,有些内容得赶快记录下来 ...

  6. asp.net MVC code first Migrations : Model 同步到DB中

    找来找去,看来用这个功能的人很少. http://www.it165.net/pro/html/201403/10653.html 步骤: 1,在程序包管理控制台上,Enable-Migrations ...

  7. 点击按钮跳出隐藏的div层,并设背景。

    style: .black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; height: 10 ...

  8. java EE中使用PO和VO的注意事项

    1.基本定义  PO(Persistence Object 持久化对象)是直接跟持久层数据库打交道的java Bean (model,entity,bean等叫法都是可以的),里面除了私有的成员变量之 ...

  9. Freemarker工具类

    Freemarker文件模板工具类 提供了解析生成文件.解析生成字符串的两个方法! package org.lunatic.util; import java.io.File; import java ...

  10. ibatis

    ibatis学习笔记(一)>>>>>>>sqlMapConfig.xml文件详解 1.sqlMapConfig.xml配置文件详解: Xml代码 1. < ...