Spark迭代HDFS目录

Jon*_*Jon 34 hadoop hdfs apache-spark

我在HDFS上有一个目录目录,我想迭代这些目录.使用SparkContext对象有没有简单的方法来使用Spark?

Mik*_*ark 47

你可以用org.apache.hadoop.fs.FileSystem.特别,FileSystem.listFiles([path], true)

和Spark一起......

FileSystem.get(sc.hadoopConfiguration).listFiles(..., true)
Run Code Online (Sandbox Code Playgroud)

编辑

值得注意的是,良好的做法是获得FileSystem与该Path计划相关的内容.

path.getFileSystem(sc.hadoopConfiguration).listFiles(path, true)
Run Code Online (Sandbox Code Playgroud)


Tag*_*gar 26

如果有人有兴趣,这是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(), f.getLen())
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,我得到组成disc_mrt.unified_fact Hive表的所有文件的列表.

FileStatus对象的其他方法,如getLen()来获取文件大小,如下所述:

类FileStatus

  • pyspark版本的支持者!工作完美!谢谢! (4认同)

ozw*_*5rd 15

import  org.apache.hadoop.fs.{FileSystem,Path}

FileSystem.get( sc.hadoopConfiguration ).listStatus( new Path("hdfs:///tmp")).foreach( x => println(x.getPath ))
Run Code Online (Sandbox Code Playgroud)

这对我有用.

Spark版本1.5.0-cdh5.5.2