2012-05-20 8 views
2

저는 HDFS 서버에 저장된 여러 텍스트 파일에서 파이썬으로 데이터 라인을 읽는 방법을 찾으려고합니다. 각 행을 구문 분석하고 데이터의 일부만 유지해야하므로 파일을 로컬에 저장하지 않는 것이 좋습니다.Python에서 HDFS에 저장된 파일에서 행을 읽는 가장 효율적인 방법은 무엇입니까?

서버에 연결하고 특정 폴더의 모든 파일을 이동하고 각 파일에서 모든 줄을 읽고 (이 질문과 관련없는) 작업을 수행해야합니다.

+1

어쨌든 관심이있는 파일의 모든 행을 읽어야 할 경우 여러 개의 작은 네트워크 요청으로 두 개 이상의 (한 방향으로) 길게 커가는 큰 요구 사항은 무엇입니까? – lvc

+0

두 가지 더 큰 요청을해야합니까? 최선의 패키지를 결정하려고 노력 중입니다 – Tamar

+0

Google 검색에서 다음과 같이 나타납니다. https://github.com/traviscrawford/python-hdfs/blob/master/example.py –

답변

1

Python-hdfs의 질문에 언급 된 GitHub 저장소는 Python에서 HDFS에 대한 C 인터페이스 인 libhdfs를 통해 HDFS를 쿼리합니다. 최근에 HDFS에 REST 인터페이스를 제공하는 WebHDFS가 소개되었습니다. https://github.com/drelu/webhdfs-py은 WebHDFS 용 Python 클라이언트이며 python-hdfs보다 더 나은 선택 일 수 있습니다.

+0

"은 python-hdfs보다 더 나은 선택 일 것입니다." 왜? – Marcin

+0

REST 인터페이스가 최근에 구현되어보다 적극적으로 유지 관리되기 때문에. 또한 C 클라이언트의 추가 빌드 복잡성을 필요로하지 않으며 일반 텍스트 프로토콜을 사용합니다. 이론적으로 일이 잘못되면 디버깅하기가 더 쉽습니다. –

0

pythonic 방법은 itertools.chain을 사용하는 것입니다. 그러나 파일을 반복하고 파일의 행을 반복하여 한 번에 한 줄씩 출력하는 작은 유틸리티 생성기 함수를 작성할 수 있습니다. 이런 식으로 뭔가 :

def lines_in_files(connection): 
    for f in # some code which fetches a files at a time from the connection 
     for line in f: 
      yield line 

하면, 모든 파일 방식을 지원 for line in을하기 전에 StringIO에서 그 내용을 포장하지 않는 가져온 파일 객체.

관련 문제