2016-09-01 3 views
3

파이썬 스파크 유틸리티를 작성하여 파일을 읽고 변환합니다. 파일에 많은 양의 데이터가 있습니다 (최대 12GB). 나는 sc.textFile을 사용하여 RDD를 만들고 논리는 RDD의 각 줄을 ","로 줄을 나누고 매핑을 기반으로 필드 값을 변경하는지도 함수에 전달하는 것입니다.PySpark 다중 인코딩을 사용하는 문자열을 읽는 방법

파일의 샘플 행입니다. 00141640203127009,1는 000000000000,134314, 모바일, ce87862158eb0dff3023e16850f0417a-cs31,584e2cd63057b7ed, Privé, 잡담

때문에 값 "Privé는"나는 UnicodeDecodeError를 얻을. 나는이 값을 구문 분석 다음에 시도 :

if isinstance(v[12],basestring): 
      v[12] = v[12].encode('utf8') 
     else: 
      v[12] = unicode(v[12]).encode('utf8') 

을하지만이 필드를 파일에 데이터를 다시 쓸 때 'Priv�'로 번역됩니다. Linux 소스 파일 유형의 은 "ISO-8859 텍스트, 매우 긴 행, CRLF 행 종결 자"로 표시됩니다.

누군가 나를 Spark에서 올바른 방법으로 알려주거나 혼합 된 인코딩으로 파일을 읽고 쓸 수 있습니까?

답변

0

textFile으로 전화 할 경우 use_unicode에서 False으로 설정할 수 있습니다. 원하는 인코딩을 사용하여 추가 처리 할 수있는 str 개체 (Python 2.x) 또는 bytes 개체 (Python 3.x)의 RDD를 제공합니다.

sc.textFile(path, use_unicode=False).map(lambda x: x.decode("iso-8859-1")) 
+0

안녕하세요 제로 323, 빠른 응답을 주셔서 감사합니다. 나는 시도했지만 파일에 쓸 때 'Priv�'값을 보게된다. – Harish

+0

인코딩은 당신의 경우에 다를 수 있으며, iso-8859-1는 단지 하나의 예일 뿐이다. – zero323

관련 문제