복붙노트

[HADOOP] 하위 디렉토리의 목록을 가져옵니다

HADOOP

하위 디렉토리의 목록을 가져옵니다

나는이 작업을 수행 할 수 있습니다 알고 :

data = sc.textFile('/hadoop_foo/a')
data.count()
240
data = sc.textFile('/hadoop_foo/*')
data.count()
168129

그러나, 나는 "/ hadoop_foo /"모든 하위 디렉토리의 데이터의 크기를 계산하고 싶습니다. 나는 그렇게 할 수 있습니까?

즉, 내가 원하는 것은이 같은 것입니다 :

subdirectories = magicFunction()
for subdir in subdirectories:
  data sc.textFile(subdir)
  data.count()

나는 시도했다 :

In [9]: [x[0] for x in os.walk("/hadoop_foo/")]
Out[9]: []

하지만 난 그게 드라이버 (이 경우에 게이트웨이)의 로컬 디렉토리에서 검색하기 때문에 "/이 hadoop_foo /"를 HDFS에 자리 잡고있는 동안 즉, 실패 생각합니다. 대한 동일 "HDFS : /// hadoop_foo /".

실행할 수있는 방법이 있다면 내가 HDFS에 대한 재귀 적으로 하위 디렉토리를 나열 할 수 있습니다 어떻게 읽고 나면? 궁금 :

hadoop dfs -lsr /hadoop_foo/

코드에서 ..

일반 TXT에 두 개의 수레를 작성하는 올바른 방법에서 :

In [28]: os.getcwd()
Out[28]: '/homes/gsamaras'  <-- which is my local directory

해결법

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

    1.파이썬 사용 HDFS 모듈; 도보 () 메소드는 파일의 사용자 목록을 얻을 수 있습니다.

    파이썬 사용 HDFS 모듈; 도보 () 메소드는 파일의 사용자 목록을 얻을 수 있습니다.

    코드는 다음과 같이 보일 것입니다 :

    from hdfs import InsecureClient
    
    client = InsecureClient('http://host:port', user='user')
    for stuff in client.walk(dir, 0, True):
    ...
    

    스칼라하면 파일 시스템을 (발 FS = FileSystem.get (새 구성 ())) 얻을 https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/fs/FileSystem를 실행할 수 있습니다 이 .html #의 때 listFiles (org.apache.hadoop.fs.Path, 부울)

    또한 os.subprocess와 스크립트에서 쉘 명령을 실행할 수 있지만 여기에 쉘 유틸리티의 텍스트 출력에 의존하기 때문에 이것은 권장되는 방법 결코 없다.

    결국, 어떤 OP 근무하는) (subprocess.check_output를 사용했다 :

    subdirectories = subprocess.check_output(["hadoop","fs","-ls", "/hadoop_foo/"])
    
  2. from https://stackoverflow.com/questions/39420685/get-a-list-of-subdirectories by cc-by-sa and MIT license