복붙노트

[HADOOP] 파이썬에서 캐럿 A를 구분

HADOOP

파이썬에서 캐럿 A를 구분

37101000ssd48800^A1420asd938987^A2011-09-10^A18:47:50.000^A99.00^A1^A0^A
37101000sd48801^A44557asd03082^A2011-09-06^A13:24:58.000^A42.01^A1^A0^A

그래서 처음에 나는 문자 그대로 그것을 시도했다.

line = line.split("^A")

그리고 또한

line = line.split("\\u001")

이 작업을 수행하면 첫 번째 방법이 로컬 컴퓨터에서 작동합니다.

cat input.txt | python mapper.py 

로컬로 잘 실행되지만 (input.txt는 위의 데이터 임), hadoop 스트리밍 클러스터에서는 실패합니다.

누군가는 "\\ u001"을 구분 기호로 사용해야한다고 말했지만 내 로컬 시스템이나 클러스터에서 작동하지 않습니다.

내가 로컬에서 디버깅하는 경우 :

cat input.txt | python mapper.py | sort | python reducer.py

로컬에서 구분 기호로 "^ A"를 사용하지만 클러스터에서 실행할 때 오류가 발생하며 오류 코드가 너무 도움이되지 않습니다.

이 디버깅을 어떻게 할 수 있습니까? 감사

해결법

  1. ==============================

    1.원래 데이터가 구분 기호로 control-A를 사용하고 데이터를 나열하는 데 사용하는 것과 같이 ^ A로 인쇄되는 경우 두 가지 선택 사항이 있습니다.

    원래 데이터가 구분 기호로 control-A를 사용하고 데이터를 나열하는 데 사용하는 것과 같이 ^ A로 인쇄되는 경우 두 가지 선택 사항이 있습니다.

    후자는 거의 항상 당신이 정말로 원하는 것입니다. 이것이 당신에게서 작동하지 않는 이유는 split ( '\\ u001')을 써서 역 슬래시를 이스케이프 처리했기 때문에, control-A보다는 리터럴 문자열 \ u001에서 분리된다는 것입니다.

    원래 데이터에 ^ A (캐럿 뒤에 A가옵니다)가 구분 기호로 사용되는 경우 split ( '^ A')을 사용하십시오.

  2. from https://stackoverflow.com/questions/13462006/delimiting-carat-a-in-python by cc-by-sa and MIT license