복붙노트

[HADOOP] Spark 반복적 인 HDFS 디렉토리

HADOOP

Spark 반복적 인 HDFS 디렉토리

HDFS에 디렉토리 디렉토리가 있으며, 디렉토리를 반복하고 싶습니다. SparkContext 객체를 사용하여 Spark에서이 작업을 수행하는 쉬운 방법이 있습니까?

해결법

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

    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. ==============================

    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. ==============================

    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. ==============================

    4.이것은 나를 위해 일했다.

    이것은 나를 위해 일했다.

    FileSystem.get(new URI("hdfs://HAservice:9000"), sc.hadoopConfiguration).listStatus( new Path("/tmp/")).foreach( x => println(x.getPath ))
    
  5. ==============================

    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. ==============================

    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())
    }
    
  7. from https://stackoverflow.com/questions/27023766/spark-iterate-hdfs-directory by cc-by-sa and MIT license