使用Pig Latin並將數據存儲在.txt文件中加載包含某些特定字符(例如,À,°等)的數據可能會看到txt文件中的這些符號顯示爲ï ½½和ï字符。這是因爲UTF-8替換字符。 我想問一下,是否有可能以某種方式避免它,也許有一些豬命令,在結果(在txt文件中)例如À而不是â?Pig中的編碼
Q
Pig中的編碼
2
A
回答
3
在Pig中,我們構建的動態調用者允許Pig程序員引用Java函數,而無需將它們包裝在自定義Pig UDF中。所以,現在你可以將數據加載爲UTF-8編碼的字符串,然後將其解碼,然後對其執行所有操作,然後將其存儲爲UTF-8。我想這應該對第一部分的工作:
DEFINE UrlDecode InvokeForString('java.net.URLDecoder.decode', 'String String');
encoded_strings = LOAD 'encoded_strings.txt' as (encoded:chararray);
decoded_strings = FOREACH encoded_strings GENERATE UrlDecode(encoded, 'UTF-8');
Java代碼負責做這個是:
import java.io.IOException;
import java.net.URLDecoder;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class UrlDecode extends EvalFunc<String> {
@Override
public String exec(Tuple input) throws IOException {
String encoded = (String) input.get(0);
String encoding = (String) input.get(1);
return URLDecoder.decode(encoded, encoding);
}
}
現在修改這個代碼返回正常的字符串UTF-8編碼字符串,並將其存儲到您的文本文件。希望它有效。
0
這是因爲文本(http://hadoop.apache.org/docs/r2.6.0/api/org/apache/hadoop/io/Text.html)自動將輸入數據(字節)轉換爲UTF-8。爲了避免這種情況,你不應該使用文本。
這就是說,你應該使用字節組類型,而不是chararray(ByteArray的不使用文本等則不作任何轉換)。既然你不指定任何代碼,我會爲插圖提供了一個例子:
這是你做了什麼(很可能):
converted_to_utf = LOAD 'strangeEncodingdata' using TextLoader AS (line:chararray);
這是你想要做什麼:
no_conversion = LOAD 'strangeEncodingdata' using TextLoader AS (line:bytearray);
相關問題
- 1. PIG UDF(Python)字符集編碼
- 2. 在PIG中加入數據後的多重編碼
- 3. 如何在Pig中編寫函數?
- 4. 如何在Scala中編寫Pig UDF
- 5. 如何在IntelliJ中編譯Apache PIG?
- 6. SAS宏代碼到Pig/Hive
- 7. PIG中的MultiLevel JSON
- 8. Apache Pig中的UnGroup
- 9. Pig中的Python UDF
- 10. Pig中的NoSuchObjectException Hacatalog
- 11. 學習Apache Pig編程的問題
- 12. python的輸出代碼pig latin問題
- 13. 無法使用Pig編寫SequenceFile
- 14. Apache Pig中的時差?
- 15. PIG中的字段數
- 16. 更新2 PIG中的列
- 17. 在Apache Pig中的排名
- 18. 總結Pig中的值
- 19. 如何匹配PIG中的','?
- 20. PIG中的JSONStorage問題
- 21. PIG腳本中的Ruby UDF
- 22. 如何解碼來自列的Pig中的JSON?
- 23. 使用PIG的XMLParsing
- 24. 如何使用Pig加載數據在hbase中使用Pig
- 25. CIGStorage()不能在PIG中使用較高記錄(Pig中的CqlStorage()拋出異常)
- 26. 如何在Jython中爲Apache Pig編寫schemaFunction?
- 27. 將行添加到Pig中的表中
- 28. Pig中元組值的中位數?
- 29. 在PIG中定義JsonLoader中的模式
- 30. 在Pig中加載關係
你確定來源是UTF-8編碼?如果沒有,您將不得不實現自己的存儲功能來支持其他編碼。 – SNeumann