[Java] 数据分析 -- 大数据
单词计数
- 需求:输入小说文本,输出每个单词出现的次数
- 实现:分map、combine、reduce三个阶段实现


1 /* Data Analysis with Java
2 * John R. Hubbard
3 * Aug 4, 2017
4 */
5
6 package com.hongfeng.Chapter11;
7
8 import java.io.File;
9 import java.io.IOException;
10 import java.io.PrintWriter;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.HashMap;
14 import java.util.List;
15 import java.util.Map;
16 import java.util.Scanner;
17
18 public class Example1 {
19 public static void main(String[] args) {
20 try {
21 File tempFile = new File("data/Temp.dat");
22 map("data/sonnets/", 80, tempFile);
23
24 Map<String,StringBuilder> hashTable = new HashMap(2500);
25 combine(tempFile, hashTable);
26
27 File outFile = new File("data/Output.dat");
28 reduce(hashTable, outFile);
29 } catch (IOException e) {
30 System.err.println(e);
31 }
32 }
33
34 public static void map(String src, int n, File temp) throws IOException {
35 PrintWriter writer = new PrintWriter(temp);
36 for (int i = 0; i < n; i++) {
37 String filename = String.format("%sSonnet%03d.txt", src, i+1);
38 map(filename, writer);
39 }
40 writer.close();
41 }
42
43 public static void combine(File temp, Map<String,StringBuilder> table)
44 throws IOException {
45 Scanner scanner = new Scanner(temp);
46 while (scanner.hasNext()) {
47 String word = scanner.next();
48 StringBuilder value = table.get(word);
49 if (value == null) {
50 value = new StringBuilder("");
51 }
52 table.put(word, value.append(" 1"));
53 scanner.nextLine(); // scan past the rest of the line (a "1")
54 }
55 scanner.close();
56 }
57
58 public static void reduce(Map<String,StringBuilder> table, File out)
59 throws IOException {
60 PrintWriter writer = new PrintWriter(out);
61 for (Map.Entry<String, StringBuilder> entry : table.entrySet()) {
62 String key = entry.getKey(); // e.g., "speak"
63 String value = entry.getValue().toString(); // e.g., "1 1 1 1 1"
64 reduce(key, value, writer);
65 }
66 writer.close();
67 }
68
69
70 /* Writes the pair (word, 1) for each word in the specified file.
71 */
72 public static void map(String filename, PrintWriter writer)
73 throws IOException {
74 Scanner input = new Scanner(new File(filename));
75 input.useDelimiter("[.,:;()?!\"\\s]+");
76 while (input.hasNext()) {
77 String word = input.next();
78 writer.printf("%s 1%n", word.toLowerCase());
79 }
80 input.close();
81 }
82
83 /* Counts the 1s in the value argument and writes (key, count) to file.
84 */
85 public static void reduce(String key, String value, PrintWriter writer)
86 throws IOException {
87 int count = (value.length() + 1)/2; // e.g. "1 1 1 1 1" => 5
88 writer.printf("%s %d%n", key, count);
89 }
90
91 private static void sort(File file) throws IOException {
92 Scanner input = new Scanner(file);
93 List<String> list = new ArrayList();
94 while (input.hasNext()) {
95 list.add(input.nextLine());
96 }
97 input.close();
98 Collections.sort(list);
99 PrintWriter output = new PrintWriter(file);
100 for (String string : list) {
101 output.println(string);
102 }
103 output.close();
104 }
105 }
参考
java稀疏矩阵乘法
https://www.cnblogs.com/a1439775520/p/13074387.html
mapreduce实现稀疏矩阵乘法
https://my.oschina.net/ssrs2202/blog/494516?p=1
https://blog.csdn.net/liuxinghao/article/details/39958957
hashmap自定义键
https://blog.csdn.net/weixin_30502965/article/details/95265093
https://blog.csdn.net/weixin_33881426/article/details/112074005
https://blog.csdn.net/u011311291/article/details/87873756
https://blog.csdn.net/Revivedsun/article/details/96225010
[Java] 数据分析 -- 大数据的更多相关文章
- 一句话了解JAVA与大数据之间的关系
大数据无疑是目前IT领域的最受关注的热词之一.几乎凡事都要挂上点大数据,否则就显得你OUT了.如果再找一个可以跟大数据并驾齐驱的IT热词,JAVA无疑是跟大数据并驾齐驱的一个词语.很多人在提到大数据的 ...
- python、Java、大数据和Android的薪资如何?
莫名其妙,从去年年底开始,Python这个东西在中国,突然一下子就火起来了,直至现在,他的热度更是超越了java,成为软件工程师最为关注的话题.Python之所以能火起来,很大一方面是因为大数据.人工 ...
- 1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!
1月中旬,阿里云云栖社区 联合 博文视点 为大家带来十本技术书籍(机器学习.Java.大数据等).以下为书籍详情,文末还有福利哦! 书籍名称:Oracle数据库问题解决方案和故障排除手册 内容简介 & ...
- 毕业生、程序猿转岗该如何选择Java、大数据和VR?
许久不见的朋友请我吃饭,期间给我介绍他一个弟弟,说明年要毕业了,还不知道找啥工作,说有培训机构让他学VR.大数据什么的,不知道前景咋样,想咨询一下我.相信很多朋友面临毕业,都不知道该从事哪个行业,自己 ...
- 毕业生、程序猿转岗该如何选择Java、大数据和VR?答案在这里!
许久不见的朋友请我吃饭,期间给我介绍他一个弟弟,说明年要毕业了,还不知道找啥工作,说有培训机构让他学VR.大数据什么的,不知道前景咋样,想咨询一下我.相信很多朋友面临毕业,都不知道该从事哪个行业,自己 ...
- Java转大数据开发全套视频资料
大数据在近两年可算是特别火,有很多人都想去学大数据,有java转大数据的,零基础学习大数据的.但是大数据真的好学吗. 我们先来了解一下什么是大数据. 大数据是指无法在一定时间内用常规软件工具对其内容进 ...
- java 与大数据学习较好的网站
C# C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!https://www.cnblogs.com/doforfuture/p/6293926.html ...
- Java转型大数据开发全套教程,都在这儿!
众所周知,很多语言技术已经在长久的历史发展中掩埋,这期间不同的程序员也走出的自己的发展道路. 有的去了解新的发展趋势的语言,了解新的技术,利用自己原先的思维顺利改变自己的title. 比如我自己,也都 ...
- java excel大数据量导入导出与优化
package com.hundsun.ta.utils; import java.io.File; import java.io.FileOutputStream; import java.io.I ...
随机推荐
- python之极简ATM系统示例
"""用户可登陆系统输错三次锁定账号用户可以创建新的用户名密码新用户初始账户设为0新用户可直接登陆系统用户登陆成功后可以选择业务类型用户数据可以根据业务修改输入Q随时退出 ...
- java例题_33 等腰输出杨辉三角
1 /*33 [程序 33 杨辉三角] 2 题目:打印出杨辉三角形(要求打印出 10 行如下图) 3 程序分析: 4 1 5 1 1 6 1 2 1 7 1 3 3 1 8 1 4 6 4 1 9 1 ...
- 学习Typora来写博客
Typora学习 标题分级 知识详解 标题分级可使用快捷键Ctry+数字键(1.2.3.4.5.6.0) 例如Ctry+1为一级标题,Ctry+2为二级标题,以此类推,总共可分为六个级别的标题,Ctr ...
- 茫茫内存,我该如何用 windbg 找到你 ?
一:背景 1. 讲故事 前天wx上有个朋友丢给我一个dump,让我帮忙鉴定一下某些敏感信息在内存中是否也是加密的,现在数据安全很重要,不仅数据库中的信息要加密,灌到内存后数据同样也需密文存储,随用随解 ...
- 我成为 Microsofti Azure MVP 啦!(ps:不是美国职业篮球)
一,引言 今天是个高兴的日子,早上10点左右收到了来自微软的MVP的礼包的快递,对我来说,这是一件很值得纪念的日子.所以今天就水一篇心得感想吧!!! 我是年前2月9号开始申请MVP的,经历了差不多1个 ...
- Spring Boot demo系列(三):Spring Web+MyBatis Plus
2021.2.24 更新 1 概述 Spring Web+MyBatis Plus的一个Demo,内容和上一篇类似,因此重点放在MyBatis Plus这里. 2 dao层 MyBatis Plus相 ...
- kube-batch 创建的pod 一直是Pending
官网的例子 apiVersion: batch/v1 kind: Job metadata: name: qj-1 spec: backoffLimit: 6 completions: 6 paral ...
- 前端缓存API请求数据
1. 背景 在一些项目中,有时候会出现不同模块重复请求大量相同api接口的情况,特别是在一些功能相似的后台管理页面中.以下面这几个页面为例,每次进入页面都需要请求等大量重复的下拉框数据,下拉框数据短时 ...
- 基于MATLAB的手写公式识别(9)
基于MATLAB的手写公式识别(9) 1.2图像的二值化 close all; clear all; Img=imread('drink.jpg'); %灰度化 Img_Gray=rgb2gray(I ...
- 测试工具PerfDog的使用
使用操作:https://www.jianshu.com/p/cc04c710e643下载地址:https://perfdog.qq.com/