[HADOOP] Spark 반복적 인 HDFS 디렉토리
HADOOPSpark 반복적 인 HDFS 디렉토리
HDFS에 디렉토리 디렉토리가 있으며, 디렉토리를 반복하고 싶습니다. SparkContext 객체를 사용하여 Spark에서이 작업을 수행하는 쉬운 방법이 있습니까?
해결법
-
==============================
1.org.apache.hadoop.fs.FileSystem을 사용할 수 있습니다. 특히, FileSystem.listFiles ([path], true)
org.apache.hadoop.fs.FileSystem을 사용할 수 있습니다. 특히, FileSystem.listFiles ([path], true)
스파크와 함께 ...
FileSystem.get(sc.hadoopConfiguration()).listFiles(..., true)
편집하다
좋은 방법은 Path 체계와 관련된 FileSystem을 얻는 것입니다.
path.getFileSystem(sc.hadoopConfiguration).listFiles(path, true)
-
==============================
2.누군가 PySpark 버전에 관심이 있다면 :
누군가 PySpark 버전에 관심이 있다면 :
hadoop = sc._jvm.org.apache.hadoop fs = hadoop.fs.FileSystem conf = hadoop.conf.Configuration() path = hadoop.fs.Path('/hivewarehouse/disc_mrt.db/unified_fact/') for f in fs.get(conf).listStatus(path): print f.getPath()
이 특별한 경우에 나는 disk_mrt.unified_fact 하이브 테이블을 구성하는 모든 파일의 목록을 얻습니다.
파일 크기를 얻기위한 getLen ()과 같은 FileStatus 객체의 다른 메소드는 다음과 같습니다.
클래스 FileStatus
-
==============================
3.
import org.apache.hadoop.fs.{FileSystem,Path} FileSystem.get( sc.hadoopConfiguration ).listStatus( new Path("hdfs:///tmp")).foreach( x => println(x.getPath ))
이것은 나를 위해 일했습니다.
스파크 버전 1.5.0-cdh5.5.2
-
==============================
4.이것은 나를 위해 일했다.
이것은 나를 위해 일했다.
FileSystem.get(new URI("hdfs://HAservice:9000"), sc.hadoopConfiguration).listStatus( new Path("/tmp/")).foreach( x => println(x.getPath ))
-
==============================
5.@ Tagar는 원격 HDS를 연결하는 방법을 말하지 않았지만이 대답은 :
@ Tagar는 원격 HDS를 연결하는 방법을 말하지 않았지만이 대답은 :
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())
-
==============================
6.globStatus 상태로 시도 할 수도 있습니다.
globStatus 상태로 시도 할 수도 있습니다.
val listStatus = org.apache.hadoop.fs.FileSystem.get(new URI(url), sc.hadoopConfiguration).globStatus(new org.apache.hadoop.fs.Path(url)) for (urlStatus <- listStatus) { println("urlStatus get Path:"+urlStatus.getPath()) }
from https://stackoverflow.com/questions/27023766/spark-iterate-hdfs-directory by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] job.setOutputKeyClass 및 job.setOutputReduceClass는 어디에 사용됩니까? (0) | 2019.06.03 |
---|---|
[HADOOP] 하둡의 텍스트와 문자열의 차이점 (0) | 2019.06.03 |
[HADOOP] 지도 축소에 대한 유일한 장점을 캐싱하고 있습니까? (0) | 2019.06.03 |
[HADOOP] Hadoop Map Reduce에서 파트 파일 이름 바꾸기 (0) | 2019.06.03 |
[HADOOP] 정확히 DFS가 아닌 것은 의미합니까? (0) | 2019.06.03 |