2012-11-20 18 views
8

Próbuję użyć^A jako separatora między kluczem a wartością w moich plikach wyjściowych zmniejszania. Uważam, że ustawienie config "mapred.textoutputformat.separator" jest to, co chcę i to prawidłowo przełącza separator do "":Hadoop - textouputformat.separator użyj ctrlA (^ A)

conf.set("mapred.textoutputformat.separator", ","); 

Ale to nie może obsłużyć^znaku:

conf.set("mapred.textoutputformat.separator", "\u0001"); 

generuje ten błąd:

ERROR security.UserGroupInformation: PriviledgedActionException as:user (auth:SIMPLE) cause:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.lang.RuntimeException: org.xml.sax.SAXParseException; lineNumber: 68; columnNumber: 94; Character reference "&#

znalazłem ten bilet https://issues.apache.org/jira/browse/HADOOP-7542 i widzą tri ed, aby naprawić to, ale przywrócił poprawkę ze względu na obawy XML1.1.

W takim razie zastanawiam się, czy komuś udało się ustawić separator na^A (wydaje się dość powszechny), korzystając z łatwej pracy. Lub jeśli powinienem po prostu załatwić i użyć separatora tabulatorów.

Dzięki!

biegnę Hadoop 0.20.2-cdh3u5 na CentOS 6.2

+2

Awans, to ważne pytanie, należy zachęcać. – Siddharth

Odpowiedz

4

Rozglądając wygląda może istnieją trzy opcje, które znalazłem rozwiązania tego problemu:

możliwych rozwiązań, jak opisano w linku powyżej są:

  1. Możesz kodować znak separatora przez Base64. Następnie należy utworzyć niestandardowy TextOutputFormat, który przesłania metodę getRecordWriter i dekoduje separator kodowany w Base64.
  2. Utwórz ponownie niestandardowy TextOutputFormat, z wyjątkiem zmiany domyślnego znaku separatora na karcie.
  3. Umieść ogranicznik za pomocą pliku zasobów XML. Możesz określić niestandardowy plik zasobów, używając metody addResource() konfiguracji zadań.
+0

Dzięki BN. # 3 brzmi jak najczystsze podejście. Dam ci ten strzał. –