使用Echarts和Ajax動態載入資料進行大資料視覺化
在前面的帖子【Java/Web呼叫Hadoop進行MapReduce示例】中,我們實現了JavaWeb呼叫Hadoop統計使用者上傳的文字檔案中的單詞出現的次數。
效果如下:
現在我們使用Echarts進行資料視覺化,達到如下目的:
二、伺服器端的改動
相比之前,伺服器端改用json返回資料,將排過序的map返回,key為單詞,value為該單詞出現的次數。
@RequestMapping("/wordcount")
//呼叫Hadoop進行mapreduce
public void wordcount(HttpServletRequest request,
HttpServletResponse response) {
Map<String,Integer> tempMap = new HashMap<String,Integer>();
List<String> strlist= new ArrayList<String>();
System.out.println("進入controller wordcount ");
User user = (User) request.getSession().getAttribute("user");
System.out.println(user);
// if(user == null)
// return "login";
WordCount c = new WordCount();//新建單詞統計任務
String username = user.getU_username();
String input = "hdfs://chenjie-virtual-machine:9000/user/" + username
+ "/wordcountinput";//指定Hadoop檔案系統的輸入資料夾
String output = "hdfs://chenjie-virtual-machine:9000/user/" + username
+ "/wordcountoutput";//指定Hadoop檔案系統的輸出資料夾
String reslt = output + "/part-r-00000";//預設輸出檔案
try {
Thread.sleep(3*1000);
c.main(new String[] { input, output });//呼叫單詞統計任務
Configuration conf = new Configuration();//新建Hadoop配置
conf.addResource(new Path("/opt/hadoop-1.2.1/conf/core-site.xml"));//新增Hadoop配置,找到Hadoop部署資訊
conf.addResource(new Path("/opt/hadoop-1.2.1/conf/hdfs-site.xml"));//Hadoop配置,找到檔案系統
FileSystem fileSystem = FileSystem.get(conf);//得打檔案系統
Path file = new Path(reslt);//找到輸出結果檔案
FSDataInputStream inStream = fileSystem.open(file);//開啟
URI uri = file.toUri();//得到輸出檔案路徑
System.out.println(uri);
String data = null;
while ((data = inStream.readLine()) != null ) {
strlist.add(data);
int bt = data.lastIndexOf('\t');//Hadoop的輸出檔案每一行為word times的形式,單詞和次數之間為一個tab鍵(\t)
tempMap.put(data.substring(0,bt), Integer.parseInt(data.substring(bt+1,data.length())));
//System.out.println(data.substring(0,bt) + "出現了" + Integer.parseInt(data.substring(bt+1,data.length())) + "次");
//response.getOutputStream().println(data);//講結果檔案寫回使用者網頁
}
//response.getOutputStream().println("success.");//講結果檔案寫回使用者網頁
inStream.close();
tempMap = sortByValue(tempMap);//將該Map按出現次數從大到小排序
Map<String,Integer> resultMap = new HashMap<String,Integer>();
Set<String> keys = tempMap.keySet();
int size = 50;//找到前20個
for(String key : keys)
{
if(size==0)
break;
resultMap.put(key, tempMap.get(key));
size--;
}
Gson gson = new Gson();
String json = gson.toJson(resultMap);//將結果轉化為json字串
request.getSession().setAttribute("json", json);//存入session中
response.getWriter().write(json);//返回json字串
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
}
}
public static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
List<Map.Entry<K, V>> list = new LinkedList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
return (o2.getValue()).compareTo(o1.getValue());//從大到小
}
});
Map<K, V> result = new LinkedHashMap<>();
for (Map.Entry<K, V> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
1、ajax從後臺獲得資料:
function getResult()
{
//alert(dataURL);
//http://192.168.153.128:8080/CJHadoopOnline/hadoop/wordcountResult
$.ajax({
type: "POST",
url:"hadoop/wordcountResult",
async:false,
success:function(map){
alert(map);
//處理得到的json資料
}
});
}
</script>
<script type="text/javascript">
function getResult()
{
//alert(dataURL);
//http://192.168.153.128:8080/CJHadoopOnline/hadoop/wordcountResult
$.ajax({
type: "POST",
url:"hadoop/wordcountResult",
async:false,
success:function(map){
alert(map);
var jsonobj=eval('('+map+')');//將json字串轉為json物件
var keys = new Array();//新建一個陣列儲存所有的key
var values = new Array();//新建一個陣列儲存所有的value
for(var key in jsonobj)
{
keys.push(key);
values.push(jsonobj[key]);//sonobj[key]為key對應的value
}
var myChart = echarts.init(document.getElementById('main'));
// 顯示標題,圖例和空的座標軸
myChart.setOption({
title: {
text: 'Hadoop處理的詞頻統計'
},
tooltip: {},
legend: {
data:['出現次數']
},
xAxis: {
data: []
},
yAxis: {},
series: [{
name: '出現次數',
type: 'bar',
data: []
}]
});
myChart.setOption({
xAxis: {
data: keys
},
series: [{
// 根據名字對應到相應的系列
name: '出現次數',
data: values
}]
});
}
});
}
</script>
3、Echarts字元雲畫法
function getResult()
{
//alert(dataURL);
//http://192.168.153.128:8080/CJHadoopOnline/hadoop/wordcountResult
$.ajax({
type: "POST",
url:"hadoop/wordcountResult",
async:false,
success:function(map){
alert(map);
var jsonobj=eval('('+map+')');//將json字串轉換為json物件
var items = new Array();//新建一個物件陣列,從官方靜態事例data: [{},{},{}]看出資料是一個物件陣列
for(var key in jsonobj)
{
var item = new Object(); //新建一個物件
item.name = key;//該物件的name屬性值為key
item.value = jsonobj[key];//該物件的value屬性值為jsonobj[key];
items.push(item);
}
var chart = echarts.init(document.getElementById('main'));
var option = {
tooltip: {},
series: [ {
type: 'wordCloud',
gridSize: 2,
sizeRange: [12, 50],
rotationRange: [-90, 90],
shape: 'pentagon',
width: 600,
height: 400,
drawOutOfBound: true,
textStyle: {
normal: {
color: function () {
return 'rgb(' + [
Math.round(Math.random() * 160),
Math.round(Math.random() * 160),
Math.round(Math.random() * 160)
].join(',') + ')';
}
},
emphasis: {
shadowBlur: 10,
shadowColor: '#333'
}
},
data:items
/*
data: [
{
name: '詞雲',
value: 10000,
textStyle: {
normal: {
color: 'black'
},
emphasis: {
color: 'red'
}
}
},
{
name: '雲端計算',
value: 555
},
{
name: '人工智慧',
value: 550
}
]
*/
} ]
};
chart.setOption(option);
window.onresize = chart.resize;
}
});
}
</script>
原始碼:
https://github.com/tudoupaisimalingshu/CJHadoopOnline
相關文章
- [Echarts視覺化] 二.php和ajax連線資料庫實現動態資料視覺化Echarts視覺化PHP資料庫
- 使用Echarts來實現資料視覺化Echarts視覺化
- 如何使用Plotly和Dash進行資料視覺化視覺化
- python資料視覺化——echartsPython視覺化Echarts
- 使用 Python 進行資料視覺化Python視覺化
- 如何使用Python 進行資料視覺化Python視覺化
- Echarts資料視覺化,easyshu圖表整合。Echarts視覺化
- 如何將資料進行資料視覺化展現?視覺化
- 大資料視覺化大資料視覺化
- 大資料視覺化的新進展大資料視覺化
- 關於微信小程式中如何實現資料視覺化-echarts動態渲染微信小程式視覺化Echarts
- Vue全家桶+Echarts資料視覺化實踐VueEcharts視覺化
- 資料視覺化:基於 Echarts + Python 實現的動態實時大屏範例【11】視覺化EchartsPython
- 如何使用R進行資料展現?且看使用iris資料視覺化例項視覺化
- 遇見大資料視覺化 : 那些 WOW 的資料視覺化案例大資料視覺化
- 動態的視覺化大屏怎麼做,哪些可以做資料視覺化軟體視覺化
- 基於Pandas+ECharts的金融大資料視覺化實現方案Echarts大資料視覺化
- python資料視覺化-matplotlib入門(7)-從網路載入資料及資料視覺化的小總結Python視覺化
- 大資料時代,人人都在談資料視覺化。大資料視覺化
- Golang 資料視覺化利器 go-echarts 開源啦Golang視覺化Echarts
- 資料視覺化,個人經驗總結(Echarts相關)視覺化Echarts
- 利用d3.js對大資料資料進行視覺化分析JS大資料視覺化
- 前端介面、HTML、CSS、大資料視覺化、echarts圖、簡歷、答辯PPT前端HTMLCSS大資料視覺化Echarts
- ListView動態載入資料View
- (在模仿中精進資料視覺化03)OD資料的特殊視覺化方式視覺化
- 小程式中使用ECharts 非同步載入資料Echarts非同步
- 使用動態變數進行動態資料比較變數
- 什麼是大資料視覺化大資料視覺化
- 大資料視覺化優勢在哪大資料視覺化
- 大資料視覺化怎麼做大資料視覺化
- 大資料視覺化的特點大資料視覺化
- 資料大屏視覺化挑戰視覺化
- python對資料集進行清洗與視覺化Python視覺化
- 【python】爬取疫情資料並進行視覺化Python視覺化
- 前端大資料視覺化從入門到實戰前端大資料視覺化
- 從靜態到動態化,Python資料視覺化中的Matplotlib和SeabornPython視覺化
- python資料視覺化-matplotlib入門(6)-從檔案中載入資料Python視覺化
- ECharts與資料視覺化:如何高效使用JavaScript實現複雜圖表Echarts視覺化JavaScript