2016-10-26 40 views
2

我有以下方法轉換爲文本

import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.io.Text; 

public class IpConversion extends UDF{ 
    private Text result = new Text(); 
    static int power = 0; 

    public Text evaluate(String input){ 
     if(input != null){ 
      long res = 0; 
      String [] ipAddressInArray = input.split("\\."); 

      for(int i=ipAddressInArray.length-1; i>= 0; i--){ 
       long ip = Integer.parseInt(ipAddressInArray[i]); 
       res += ip * Math.pow(256, power); 
       power += 1; 
       //System.out.println(ipAddressInArray(i));   
      } 

      return result; 
     } 
     //return null; 
    } 
} 

我想變reslong轉換爲Textorg.apache.hadoop.io.Text),但我不知道該怎麼做。我試圖從longtoString()轉換它,然後使用Text類的方法.set(),但我有一個錯誤「無法返回無效」。

任何人都可以幫我嗎? 謝謝。

+0

嗯,我看不到你在評估方法的任何地方設置結果字段?這可能會導致我認爲的問題 –

+0

如果其中一個答案幫助您解決了問題,那麼如果您能夠「接受」答案,以便其他人可以快速找到解決方案,那將會很好。 – GameDroids

回答

1

Here是您的Text類的文檔。正如你所看到的,你可以用Text myText = new Text(myString)實例化一個Text對象。

所以你的情況可能是這個樣子:

.... 
return new Text(""+res); 

首先,它創建了""+res一個String(你的長期追加到空字符串),然後將其實例與字符串'新Text對象新文本(「....」);並立即返回。