[HADOOP] Pyspark : HDFS 경로에있는 파일 / 디렉토리 목록 가져 오기
HADOOPPyspark : HDFS 경로에있는 파일 / 디렉토리 목록 가져 오기
제목과 같습니다. 나는 textFile을 알고 있지만 이름에서 알 수 있듯이 텍스트 파일에서만 작동합니다. HDFS (또는 로컬 경로)의 경로에있는 파일 / 디렉토리에 액세스해야합니다. 나는 pyspark를 사용하고있다.
도와 주셔서 감사합니다
해결법
-
==============================
1.Spark은 데이터를로드 할 때 도메인이 시작되는 데이터 처리 도구로만 생각하면 도움이된다고 생각합니다. 여러 형식을 읽을 수 있으며 Hadoop glob 표현식을 지원합니다.이 표현식은 HDFS에서 여러 경로를 읽는 데 매우 유용하지만 디렉토리 나 파일을 탐색하는 데 대해 알고있는 기본 기능이 없으며 Hadoop 또는 HDFS와 상호 작용하는 유틸리티.
Spark은 데이터를로드 할 때 도메인이 시작되는 데이터 처리 도구로만 생각하면 도움이된다고 생각합니다. 여러 형식을 읽을 수 있으며 Hadoop glob 표현식을 지원합니다.이 표현식은 HDFS에서 여러 경로를 읽는 데 매우 유용하지만 디렉토리 나 파일을 탐색하는 데 대해 알고있는 기본 기능이 없으며 Hadoop 또는 HDFS와 상호 작용하는 유틸리티.
esutil 및 hdfs를 포함하여 원하는 것을 수행 할 수있는 몇 가지 도구가 있습니다. hdfs lib는 CLI와 API를 모두 지원하므로 바로 여기 'Python으로 HDFS 파일을 나열하는 방법'으로 바로 이동할 수 있습니다. 다음과 같이 보입니다.
from hdfs import Config client = Config().get_client('dev') files = client.list('the_dir_path')
-
==============================
2.JVM 게이트웨이를 사용하는 것은 그리 우아하지는 않지만, 어떤 경우 아래 코드가 도움이 될 수 있습니다.
JVM 게이트웨이를 사용하는 것은 그리 우아하지는 않지만, 어떤 경우 아래 코드가 도움이 될 수 있습니다.
URI = sc._gateway.jvm.java.net.URI Path = sc._gateway.jvm.org.apache.hadoop.fs.Path FileSystem = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration fs = FileSystem.get(URI("hdfs://somehost:8020"), Configuration()) status = fs.listStatus(Path('/some_dir/yet_another_one_dir/')) for fileStatus in status: print(fileStatus.getPath())
-
==============================
3.PySpark를 사용한다면 대화식으로 명령을 실행할 수 있습니다 :
PySpark를 사용한다면 대화식으로 명령을 실행할 수 있습니다 :
선택한 디렉토리의 모든 파일 나열 :
hdfs dfs -ls <경로> 예 : hdfs dfs -ls / user / path :
import os import subprocess cmd = 'hdfs dfs -ls /user/path' files = subprocess.check_output(cmd, shell=True).strip().split('\n') for path in files: print path
또는 선택한 디렉토리의 파일 검색 :
hdfs dfs -find
-name <표현식> 예 : hdfs dfs -find / user / path -name * .txt : import os import subprocess cmd = 'hdfs dfs -find {} -name *.txt'.format(source_dir) files = subprocess.check_output(cmd, shell=True).strip().split('\n') for path in files: filename = path.split(os.path.sep)[-1].split('.txt')[0] print path, filename
-
==============================
4.디렉토리의 모든 파일을 읽으려면 sc.wholeTextFiles [doc]를 확인하십시오. 그러나 파일의 내용이 원하는 결과가 아닌 단일 행의 값으로 읽혀집니다.
디렉토리의 모든 파일을 읽으려면 sc.wholeTextFiles [doc]를 확인하십시오. 그러나 파일의 내용이 원하는 결과가 아닌 단일 행의 값으로 읽혀집니다.
일부 파일 만 읽으려면 경로 목록을 생성하고 (일반 hdfs ls 명령을 사용하여 필요한 필터링을 추가) sqlContext.read.text [doc]에 전달한 다음 DataFrame에서 RDD로 변환하는 것 같습니다. 최선의 접근 방식과 같습니다.
-
==============================
5.snakebite 라이브러리를 사용하여이 작업을 수행하는 쉬운 방법이 있습니다.
snakebite 라이브러리를 사용하여이 작업을 수행하는 쉬운 방법이 있습니다.
from snakebite.client import Client hadoop_client = Client(HADOOP_HOST, HADOOP_PORT, use_trash=False) for x in hadoop_client.ls(['/']): ... print x
from https://stackoverflow.com/questions/35750614/pyspark-get-list-of-files-directories-on-hdfs-path by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] get "오류 : ZooKeeper에서 마스터 주소를 가져올 수 없습니다. znode data == null "Hbase 쉘을 사용할 때 (0) | 2019.06.07 |
---|---|
[HADOOP] YARN의 로그 파일을 보관하는 방법은 무엇입니까? (0) | 2019.06.07 |
[HADOOP] Hadoop on EC2와 Elastic Map Reduce (0) | 2019.06.07 |
[HADOOP] hadoop에서 파일에 대한 블록 수보기 (0) | 2019.06.07 |
[HADOOP] -hivevar와 -hiveconf의 차이점은 무엇입니까? (0) | 2019.06.07 |