我在HDFS上有一个目录目录,我想迭代这些目录.使用SparkContext对象有没有简单的方法来使用Spark?
你可以用org.apache.hadoop.fs.FileSystem
.特别,FileSystem.listFiles([path], true)
和Spark一起......
FileSystem.get(sc.hadoopConfiguration).listFiles(..., true)
编辑
值得注意的是,良好的做法是获得FileSystem
与该Path
计划相关的内容.
path.getFileSystem(sc.hadoopConfiguration).listFiles(path, true)
如果有人有兴趣,这是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())
在这种特殊情况下,我得到组成disc_mrt.unified_fact Hive表的所有文件的列表.
FileStatus对象的其他方法,如getLen()来获取文件大小,如下所述:
类FileStatus
import org.apache.hadoop.fs.{FileSystem,Path} FileSystem.get( sc.hadoopConfiguration ).listStatus( new Path("hdfs:///tmp")).foreach( x => println(x.getPath ))
这对我有用.
Spark版本1.5.0-cdh5.5.2