2017-12-18 4 views
0

これら2つのコードの違いは何ですか?最初のコードを使ってHDFSで正しい出力を得ることができました。出力: "ホスト名の日付"。
しかし、2番目のコードを使用すると、ホスト名しか取得できないため、日付は表示されません。
誰も私にこれらの2つのHadoopコードの違いを教えてもらえますか?タイムスタンプから日付を取得するのに、これら2つのコードの違いは何ですか?

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException 
{ 
     // HostName TimeStamp      CPU  %user   
     // phddn001 240613,20:44  Average:  all  4.05   

    String valueTokens[] = value.toString().split(" "); 
    String hostName = valueTokens[0]; 
    String date = ""; 
    String timestamp = ""; 
    for (int cnt = 1; cnt < valueTokens.length; cnt++) 
    { 
     if (valueTokens[cnt].length() > 0) 
     { 
      timestamp = valueTokens[cnt]; 
      break; 
     } 
    } 
    try 
    { 
     date = timestamp.split(",")[0]; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException 
{ 
     //  HostName TimeStamp       CPU  %user  
     //  phddn001 240613,20:44  Average:  all  4.05   

    String valueTokens[] = value.toString().split(" "); 
    String hostName = valueTokens[0]; 
    String date = ""; 

    try 
    { 
     date = valueTokens[1].split(",")[0]; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

答えて

0

あなたは、単一のスペースに分割しています。空でない文字列が見つかるまで、ループは空の分割をスキップします。 2番目のコードは空の文字列をつかんでコンマを分割しようとしますが、おそらく言及していない例外がスローされます。

Javaの分割方法は正規表現を受け入れるため、複数のスペースで分割されます。

value.toString().split("\\s+") 
+0

それは働いた。ありがとう、トン:) –

関連する問題