国内精品久久久久_亚洲区手机在线中文无码播放_国内精品久久久久影院一蜜桃_日韩内射激情视频在线播放免费

      json hessian

      時間:2024-10-12 01:28 人氣:0 編輯:招聘街

      一、json hessian

      了解 JSON 和 Hessian:兩種常見的數據交換格式

      在今天的數字化世界中,數據交換是互聯網和軟件應用程序中不可或缺的一部分。為了在不同系統(tǒng)之間傳輸數據,我們通常會使用各種數據交換格式。在本文中,我們將重點介紹兩種常見的數據交換格式:JSON 和 Hessian。

      JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它易于人類閱讀和編寫,同時也易于機器解析和生成。JSON采用鍵/值對的形式組織數據,數據之間使用逗號分隔,而鍵和值之間使用冒號分隔。這種簡潔的結構使得JSON非常適用于前端與后端之間的數據交換,也被廣泛應用于Web開發(fā)和API設計中。

      與JSON不同,Hessian 是一種二進制數據交換格式,它旨在提高數據傳輸的效率和性能。Hessian采用緊湊的二進制表示形式,相比于文本格式如JSON,它在網絡傳輸時占用的帶寬更少。這使得Hessian特別適用于對網絡帶寬和速度要求較高的場景,比如移動應用程序開發(fā)和分布式系統(tǒng)通信中。

      JSON vs. Hessian:比較兩種數據交換格式的特點

      雖然JSON和Hessian都是數據交換格式,但它們在很多方面有著顯著的區(qū)別。下面我們將比較這兩種格式的特點,以便更好地理解它們各自的優(yōu)勢和適用場景。

      • 可讀性: JSON具有良好的人類可讀性,由于其文本形式,可以方便地查看和編輯。相比之下,Hessian作為二進制格式,不易被人直接讀懂。
      • 帶寬效率: Hessian在數據傳輸時占用的帶寬較少,相比于JSON,可以更快地傳輸數據并節(jié)約網絡資源。
      • 解析速度: 由于Hessian是二進制格式,機器在解析該格式時通常更快速,而JSON的解析可能會稍慢一些。
      • 語言支持: JSON在幾乎所有編程語言中都有良好的支持,而Hessian可能不如JSON那么普及,某些語言的支持可能較少。
      • 適用領域: JSON常用于Web開發(fā)中的API通信和數據交換,而Hessian更適用于要求高效率和性能的場景。

      JSON 和 Hessian 的應用場景

      隨著互聯網和移動應用的快速發(fā)展,JSON和Hessian已經在許多領域找到了廣泛的應用。以下是它們常見的應用場景:

      • JSON應用場景:
        • RESTful API的數據交換
        • 前后端數據傳輸
        • 配置文件格式
        • Web服務的數據返回
      • Hessian應用場景:
        • 分布式系統(tǒng)間的數據傳輸
        • 移動應用的網絡通信
        • RPC(遠程過程調用)
        • 對網絡帶寬要求高的場景

      結語

      JSON和Hessian作為不同類型的數據交換格式,各有其優(yōu)勢和適用范圍。在實際開發(fā)中,我們應根據具體的應用場景和需求選擇合適的數據交換格式,以確保數據傳輸的高效性和可靠性。希望通過本文的介紹,您能更好地了解JSON和Hessian,并在相關項目中做出明智的選擇。

      二、hessian json

      在當今數字化時代,不同的數據傳輸格式扮演著至關重要的角色。其中,hessianjson 是兩種常用的數據傳輸協議,它們分別具有各自的特點和優(yōu)勢。

      什么是 Hessian?

      Hessian 是一種基于二進制協議的數據傳輸格式,旨在實現快速且高效的數據交換。它使用了基于二進制的數據編碼方式,在數據傳輸時能夠更加節(jié)省帶寬和提高傳輸效率。因此,hessian 在一些對性能要求較高的應用場景中備受青睞。

      為什么選擇 Hessian?

      相比于一些文本協議,hessian 具有更快的傳輸速度和更小的數據包大小。這意味著在網絡傳輸過程中,hessian 可以減少延遲,并縮短數據傳輸的時間。另外,hessian 對于不同編程語言的兼容性也相對較好,使得不同系統(tǒng)間的數據交換更加便捷。

      什么是 JSON?

      JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,具有易讀性和便于理解的特點。它基于文本,采用鍵值對的方式組織數據,在前后端數據交互中被廣泛應用。

      為什么選擇 JSON?

      由于其簡潔明了的結構和跨語言的特性,json 在 Web 開發(fā)中被廣泛采用。無論是用于前端頁面與后端服務器之間的數據傳輸,還是作為配置文件的存儲格式,json 都展現出了其強大的應用價值。

      Hessian 與 JSON 的比較

      雖然 hessianjson 都是用于數據傳輸的格式,但它們在一些方面存在明顯的差異。 hessian 更加注重于性能和效率,適合于對速度有較高要求的系統(tǒng)。而 json 則更注重于易讀性和通用性,適合于需要跨語言交互的場景。

      在實際應用中,開發(fā)者需要根據項目需求和具體場景來選擇合適的數據傳輸格式。如果注重性能和效率,可以考慮使用 hessian;而如果更看重易用性和通用性,json 可能更為適合。

      結語

      在當前信息交互日益頻繁的環(huán)境下,選擇合適的數據傳輸格式顯得尤為重要。HessianJSON 作為兩種常用的數據傳輸協議,在不同的場景下各具優(yōu)勢,開發(fā)者可以根據項目的具體需求來靈活選擇,以實現最佳的數據交換效果。

      三、hessian和dubbo的區(qū)別?

      hessian和dubbo的二者主要區(qū)別是協議不同

      dubbo協議 Dubbo缺省協議采用單一長連接和NIO異步通訊,適合于小數據量大并發(fā)的服務調用,以及服務消費者機器數遠大于服務提供者機器數的情況。 缺省協議,使用基于mina1.1.7+hessian3.2.1的tbremoting交互。 連接個數:單連接連接方式:長連接傳輸協議:TCP 傳輸方式:NIO異步傳輸序列化:Hessian二進制序列化適用范圍:傳入傳出參數數據包較小(建議小于100K),消費者比提供者個數多,單一消費者無法壓滿提供者,盡量不要用dubbo協議傳輸大文件或超大字符串。適用場景:常規(guī)遠程服務方法調用 為什么要消費者比提供者個數多: 因dubbo協議采用單一長連接, 假設網絡為千兆網卡(1024Mbit=128MByte), 根據測試經驗數據每條連接最多只能壓滿7MByte(不同的環(huán)境可能不一樣,供參考), 理論上1個服務提供者需要20個服務消費者才能壓滿網卡。 為什么不能傳大包: 因dubbo協議采用單一長連接, 如果每次請求的數據包大小為500KByte,假設網絡為千兆網卡(1024Mbit=128MByte),每條連接最大7MByte(不同的環(huán)境可能不一樣,供參考), 單個服務提供者的TPS(每秒處理事務數)最大為:128MByte/ 500KByte = 262。單個消費者調用單個服務提供者的TPS(每秒處理事務數)最大為:7MByte/ 500KByte = 14。如果能接受,可以考慮使用,否則網絡將成為瓶頸。 為什么采用異步單一長連接: 因為服務的現狀大都是服務提供者少,通常只有幾臺機器, 而服務的消費者多,可能整個網站都在訪問該服務, 比如Morgan的提供者只有6臺提供者,卻有上百臺消費者,每天有1.5億次調用, 如果采用常規(guī)的hessian服務,服務提供者很容易就被壓跨, 通過單一連接,保證單一消費者不會壓死提供者, 長連接,減少連接握手驗證等, 并使用異步IO,復用線程池,防止C10K問題。 

      2.

      RMI RMI協議采用JDK標準的java.rmi.*實現,采用阻塞式短連接和JDK標準序列化方式 Java標準的遠程調用協議。 連接個數:多連接連接方式:短連接傳輸協議:TCP 傳輸方式:同步傳輸序列化:Java標準二進制序列化適用范圍:傳入傳出參數數據包大小混合,消費者與提供者個數差不多,可傳文件。適用場景:常規(guī)遠程服務方法調用,與原生RMI服務互操作 

      3.

      hessian Hessian協議用于集成Hessian的服務,Hessian底層采用Http通訊,采用Servlet暴露服務,Dubbo缺省內嵌Jetty作為服務器實現 基于Hessian的遠程調用協議。 連接個數:多連接連接方式:短連接傳輸協議:HTTP 傳輸方式:同步傳輸序列化:Hessian二進制序列化適用范圍:傳入傳出參數數據包較大,提供者比消費者個數多,提供者壓力較大,可傳文件。適用場景:頁面?zhèn)鬏?文件傳輸,或與原生hessian服務互操作 

      4.

      http 采用Spring的HttpInvoker實現 基于http表單的遠程調用協議

      四、hessian方程特征值?

      設 A 是n階方陣,如果存在數m和非零n維列向量 x,使得 Ax=mx 成立,則稱 m 是A的一個特征值(characteristic value)或本征值(eigenvalue)。非零n維列向量x稱為矩陣A的屬于(對應于)特征值m的特征向量或本征向量,簡稱A的特征向量或A的本征向量。

      Hessian矩陣的特征值就是形容其在該點附近特征向量方向的凹凸性,特征值越大,凸性越強。你可以把函數想想成一個小山坡,陡的那面是特征值大的方向,平緩的是特征值小的方向。而凸性和優(yōu)化方法的收斂速度有關,比如梯度下降。如果正定Hessian矩陣的特征值都差不多,那么梯度下降的收斂速度越快,反之如果其特征值相差很大,那么收斂速度越慢

      五、dubbo和hessian的區(qū)別?

      Hessian和Dubbo都是用于分布式系統(tǒng)中的遠程調用框架,但它們的實現方式有所不同。Hessian是一種基于HTTP協議的輕量級RPC框架,使用Java語言開發(fā),支持多種編程語言間的遠程調用。Hessian的特點包括:

      1. 簡單易用:Hessian可以直接將Java對象序列化成二進制數據傳輸到服務器端,從而實現遠程方法調用。這使得開發(fā)者無需手動編寫序列化和反序列化代碼,從而大大簡化了分布式系統(tǒng)的開發(fā)難度。

      2. 高效性:Hessian采用二進制數據傳輸格式,并對傳輸數據進行了壓縮處理,因此可以提供較高的網絡傳輸性能。

      3. 跨語言支持:Hessian不僅支持Java語言開發(fā),還可以與其他編程語言進行交互,例如C++, C#, Python等。

      Dubbo是一個面向服務治理的RPC框架,同時也支持通信協議的擴展。Dubbo在Hessian的基礎上做了許多擴展和優(yōu)化,并引入了插件機制、服務治理、負載均衡、集群容錯等關鍵功能。Dubbo針對企業(yè)級應用場景設計而成,并且已經有著廣泛的應用基礎。

      Dubbo的特點包括:

      1. 高性能:Dubbo采用Netty作為通信模塊,使用NIO異步處理網絡請求,因此可以提供高并發(fā)、低延遲的服務。

      2. 配置靈活:Dubbo允許開發(fā)者通過XML或注解配置服務提供者和消費者的相關參數,同時還可以基于ZooKeeper等中間件進行集群管理和服務治理。

      3. 豐富功能:Dubbo提供了豐富的功能支持,包括負載均衡、集群容錯、服務路由等,可以應對不同場景下的應用需求。

      總之,Hessian和Dubbo都是優(yōu)秀的遠程調用框架,具有各自獨特的特點和優(yōu)勢,在實際項目中需要根據具體業(yè)務需求進行選擇。

      六、hessian與dubbo協議的區(qū)別?

      區(qū)別:

      dubbo 默認協議:

      單一 TCP 長連接,Hessian 二進制序列化和 NIO 異步通訊

      適合于小數據包大并發(fā)的服務調用和服務消費者數遠大于服務提供者數的情況

      不適合傳送大數據包的服務

      hessian 協議:

      底層 Http 通訊,Servlet 暴露服務,Dubbo 缺省內嵌 Jetty 作為服務器實現

      可與原生 Hessian 服務互操作

      通訊效率高于 WebService 和 Java 自帶的序列化

      參數及返回值需實現 Serializable 接口,自定義實現 List、Map、Number、Date、Calendar 等接口

      適用于傳輸數據包較大,提供者比消費者個數多,提供者壓力較大。

      七、dubbo為什么使用hessian序列號?

      dubbo 默認協議:

      單一 TCP 長連接,Hessian 二進制序列化和 NIO 異步通訊

      適合于小數據包大并發(fā)的服務調用和服務消費者數遠大于服務提供者數的情況

      不適合傳送大數據包的服務

      hessian 協議:

      底層 Http 通訊,Servlet 暴露服務,Dubbo 缺省內嵌 Jetty 作為服務器實現

      可與原生 Hessian 服務互操作

      通訊效率高于 WebService 和 Java 自帶的序列化

      參數及返回值需實現 Serializable 接口,自定義實現 List、Map、Number、Date、Calendar 等接口

      適用于傳輸數據包較大,提供者比消費者個數多,提供者壓力較大。

      八、Hessian矩陣的特征值有什么含義?

      設 A 是n階方陣,如果存在數m和非零n維列向量 x,使得 Ax=mx 成立,則稱 m 是A的一個特征值(characteristic value)或本征值(eigenvalue)。

      非零n維列向量x稱為矩陣A的屬于(對應于)特征值m的特征向量或本征向量,簡稱A的特征向量或A的本征向量。 Hessian矩陣的特征值就是形容其在該點附近特征向量方向的凹凸性,特征值越大,凸性越強。

      你可以把函數想想成一個小山坡,陡的那面是特征值大的方向,平緩的是特征值小的方向。

      而凸性和優(yōu)化方法的收斂速度有關,比如梯度下降。

      如果正定Hessian矩陣的特征值都差不多,那么梯度下降的收斂速度越快,反之如果其特征值相差很大,那么收斂速度越慢。

      九、hessian協議和http協議有什么優(yōu)勢和差異?

      關于這個問題,Hessian協議和HTTP協議的主要區(qū)別在于它們的用途和性能。

      Hessian協議是一種二進制協議,旨在為Java對象提供高效的遠程調用服務。它使用了Java序列化技術,可以快速地序列化和反序列化Java對象,因此在處理大量對象時效率很高。Hessian協議不需要HTTP協議的額外的請求頭和響應頭,因此可以減少網絡傳輸的開銷。

      HTTP協議則是一種基于文本的協議,它主要用于Web應用程序之間的通信。HTTP協議的優(yōu)勢在于它的通用性和可擴展性。它可以通過添加自定義的請求頭和響應頭來擴展功能,而且可以使用各種不同的傳輸協議(如TCP/IP、SSL等)來保證數據傳輸的安全性和可靠性。

      總的來說,Hessian協議適用于需要高效的遠程調用服務的場景,而HTTP協議則適用于Web應用程序之間的通信和擴展。

      十、mahout面試題?

      之前看了Mahout官方示例 20news 的調用實現;于是想根據示例的流程實現其他例子。網上看到了一個關于天氣適不適合打羽毛球的例子。

      訓練數據:

      Day Outlook Temperature Humidity Wind PlayTennis

      D1 Sunny Hot High Weak No

      D2 Sunny Hot High Strong No

      D3 Overcast Hot High Weak Yes

      D4 Rain Mild High Weak Yes

      D5 Rain Cool Normal Weak Yes

      D6 Rain Cool Normal Strong No

      D7 Overcast Cool Normal Strong Yes

      D8 Sunny Mild High Weak No

      D9 Sunny Cool Normal Weak Yes

      D10 Rain Mild Normal Weak Yes

      D11 Sunny Mild Normal Strong Yes

      D12 Overcast Mild High Strong Yes

      D13 Overcast Hot Normal Weak Yes

      D14 Rain Mild High Strong No

      檢測數據:

      sunny,hot,high,weak

      結果:

      Yes=》 0.007039

      No=》 0.027418

      于是使用Java代碼調用Mahout的工具類實現分類。

      基本思想:

      1. 構造分類數據。

      2. 使用Mahout工具類進行訓練,得到訓練模型。

      3。將要檢測數據轉換成vector數據。

      4. 分類器對vector數據進行分類。

      接下來貼下我的代碼實現=》

      1. 構造分類數據:

      在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數據傳到hdfs上面。

      數據文件格式,如D1文件內容: Sunny Hot High Weak

      2. 使用Mahout工具類進行訓練,得到訓練模型。

      3。將要檢測數據轉換成vector數據。

      4. 分類器對vector數據進行分類。

      這三步,代碼我就一次全貼出來;主要是兩個類 PlayTennis1 和 BayesCheckData = =》

      package myTesting.bayes;

      import org.apache.hadoop.conf.Configuration;

      import org.apache.hadoop.fs.FileSystem;

      import org.apache.hadoop.fs.Path;

      import org.apache.hadoop.util.ToolRunner;

      import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;

      import org.apache.mahout.text.SequenceFilesFromDirectory;

      import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;

      public class PlayTennis1 {

      private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";

      /*

      * 測試代碼

      */

      public static void main(String[] args) {

      //將訓練數據轉換成 vector數據

      makeTrainVector();

      //產生訓練模型

      makeModel(false);

      //測試檢測數據

      BayesCheckData.printResult();

      }

      public static void makeCheckVector(){

      //將測試數據轉換成序列化文件

      try {

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String input = WORK_DIR+Path.SEPARATOR+"testinput";

      String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

      Path in = new Path(input);

      Path out = new Path(output);

      FileSystem fs = FileSystem.get(conf);

      if(fs.exists(in)){

      if(fs.exists(out)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(out, true);

      }

      SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

      String[] params = new String[]{"-i",input,"-o",output,"-ow"};

      ToolRunner.run(sffd, params);

      }

      } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("文件序列化失??!");

      System.exit(1);

      }

      //將序列化文件轉換成向量文件

      try {

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

      String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";

      Path in = new Path(input);

      Path out = new Path(output);

      FileSystem fs = FileSystem.get(conf);

      if(fs.exists(in)){

      if(fs.exists(out)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(out, true);

      }

      SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

      String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

      ToolRunner.run(svfsf, params);

      }

      } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("序列化文件轉換成向量失?。?#34;);

      System.out.println(2);

      }

      }

      public static void makeTrainVector(){

      //將測試數據轉換成序列化文件

      try {

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String input = WORK_DIR+Path.SEPARATOR+"input";

      String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";

      Path in = new Path(input);

      Path out = new Path(output);

      FileSystem fs = FileSystem.get(conf);

      if(fs.exists(in)){

      if(fs.exists(out)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(out, true);

      }

      SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

      String[] params = new String[]{"-i",input,"-o",output,"-ow"};

      ToolRunner.run(sffd, params);

      }

      } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("文件序列化失敗!");

      System.exit(1);

      }

      //將序列化文件轉換成向量文件

      try {

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";

      String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";

      Path in = new Path(input);

      Path out = new Path(output);

      FileSystem fs = FileSystem.get(conf);

      if(fs.exists(in)){

      if(fs.exists(out)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(out, true);

      }

      SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

      String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

      ToolRunner.run(svfsf, params);

      }

      } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("序列化文件轉換成向量失??!");

      System.out.println(2);

      }

      }

      public static void makeModel(boolean completelyNB){

      try {

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";

      String model = WORK_DIR+Path.SEPARATOR+"model";

      String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";

      Path in = new Path(input);

      Path out = new Path(model);

      Path label = new Path(labelindex);

      FileSystem fs = FileSystem.get(conf);

      if(fs.exists(in)){

      if(fs.exists(out)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(out, true);

      }

      if(fs.exists(label)){

      //boolean參數是,是否遞歸刪除的意思

      fs.delete(label, true);

      }

      TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();

      String[] params =null;

      if(completelyNB){

      params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};

      }else{

      params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};

      }

      ToolRunner.run(tnbj, params);

      }

      } catch (Exception e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("生成訓練模型失??!");

      System.exit(3);

      }

      }

      }

      package myTesting.bayes;

      import java.io.IOException;

      import java.util.HashMap;

      import java.util.Map;

      import org.apache.commons.lang.StringUtils;

      import org.apache.hadoop.conf.Configuration;

      import org.apache.hadoop.fs.Path;

      import org.apache.hadoop.fs.PathFilter;

      import org.apache.hadoop.io.IntWritable;

      import org.apache.hadoop.io.LongWritable;

      import org.apache.hadoop.io.Text;

      import org.apache.mahout.classifier.naivebayes.BayesUtils;

      import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;

      import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;

      import org.apache.mahout.common.Pair;

      import org.apache.mahout.common.iterator.sequencefile.PathType;

      import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;

      import org.apache.mahout.math.RandomAccessSparseVector;

      import org.apache.mahout.math.Vector;

      import org.apache.mahout.math.Vector.Element;

      import org.apache.mahout.vectorizer.TFIDF;

      import com.google.common.collect.ConcurrentHashMultiset;

      import com.google.common.collect.Multiset;

      public class BayesCheckData {

      private static StandardNaiveBayesClassifier classifier;

      private static Map<String, Integer> dictionary;

      private static Map<Integer, Long> documentFrequency;

      private static Map<Integer, String> labelIndex;

      public void init(Configuration conf){

      try {

      String modelPath = "/zhoujianfeng/playtennis/model";

      String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";

      String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";

      String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";

      dictionary = readDictionnary(conf, new Path(dictionaryPath));

      documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));

      labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));

      NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);

      classifier = new StandardNaiveBayesClassifier(model);

      } catch (IOException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      System.out.println("檢測數據構造成vectors初始化時報錯。。。。");

      System.exit(4);

      }

      }

      /**

      * 加載字典文件,Key: TermValue; Value:TermID

      * @param conf

      * @param dictionnaryDir

      * @return

      */

      private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {

      Map<String, Integer> dictionnary = new HashMap<String, Integer>();

      PathFilter filter = new PathFilter() {

      @Override

      public boolean accept(Path path) {

      String name = path.getName();

      return name.startsWith("dictionary.file");

      }

      };

      for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {

      dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());

      }

      return dictionnary;

      }

      /**

      * 加載df-count目錄下TermDoc頻率文件,Key: TermID; Value:DocFreq

      * @param conf

      * @param dictionnaryDir

      * @return

      */

      private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {

      Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();

      PathFilter filter = new PathFilter() {

      @Override

      public boolean accept(Path path) {

      return path.getName().startsWith("part-r");

      }

      };

      for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {

      documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());

      }

      return documentFrequency;

      }

      public static String getCheckResult(){

      Configuration conf = new Configuration();

      conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

      String classify = "NaN";

      BayesCheckData cdv = new BayesCheckData();

      cdv.init(conf);

      System.out.println("init done...............");

      Vector vector = new RandomAccessSparseVector(10000);

      TFIDF tfidf = new TFIDF();

      //sunny,hot,high,weak

      Multiset<String> words = ConcurrentHashMultiset.create();

      words.add("sunny",1);

      words.add("hot",1);

      words.add("high",1);

      words.add("weak",1);

      int documentCount = documentFrequency.get(-1).intValue(); // key=-1時表示總文檔數

      for (Multiset.Entry<String> entry : words.entrySet()) {

      String word = entry.getElement();

      int count = entry.getCount();

      Integer wordId = dictionary.get(word); // 需要從dictionary.file-0文件(tf-vector)下得到wordID,

      if (StringUtils.isEmpty(wordId.toString())){

      continue;

      }

      if (documentFrequency.get(wordId) == null){

      continue;

      }

      Long freq = documentFrequency.get(wordId);

      double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);

      vector.setQuick(wordId, tfIdfValue);

      }

      // 利用貝葉斯算法開始分類,并提取得分最好的分類label

      Vector resultVector = classifier.classifyFull(vector);

      double bestScore = -Double.MAX_VALUE;

      int bestCategoryId = -1;

      for(Element element: resultVector.all()) {

      int categoryId = element.index();

      double score = element.get();

      System.out.println("categoryId:"+categoryId+" score:"+score);

      if (score > bestScore) {

      bestScore = score;

      bestCategoryId = categoryId;

      }

      }

      classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";

      return classify;

      }

      public static void printResult(){

      System.out.println("檢測所屬類別是:"+getCheckResult());

      }

      }

      相關資訊
      熱門頻道

      Copyright © 2024 招聘街 滇ICP備2024020316號-38

      国内精品久久久久_亚洲区手机在线中文无码播放_国内精品久久久久影院一蜜桃_日韩内射激情视频在线播放免费

        罗田县| 神农架林区| 房山区| 县级市| 蕲春县| 武强县| 泗水县| 新龙县| 灵丘县| 大埔区| 惠州市| 汶上县| 龙海市| 扬州市| 图木舒克市| 云龙县| 平陆县| 逊克县| 莱西市| 漳浦县| 哈尔滨市| 宿松县| 沙洋县| 建平县| 共和县| 水富县| 来安县| 福贡县| 巫山县| 新郑市| 福安市| 交口县| 松原市| 呼玛县| 当阳市| 宜州市| 巩义市| 罗城| 曲周县| 都江堰市| 定边县|