我知道我能做到:
data = sc.textFile('/hadoop_foo/a')
data.count()
240
data = sc.textFile('/hadoop_foo/*')
data.count()
168129
但是,我想计算一下“/hadoop\u foo/”的每个子目录的数据大小。我能做到吗?
换句话说,我想要的是这样的:
subdirectories = magicFunction()
for subdir in subdirectories:
data sc.textFile(subdir)
data.count()
我试过:
In [9]: [x[0] for x in os.walk("/hadoop_foo/")]
Out[9]: []
但我认为它失败了,因为它搜索驱动程序的本地目录(在这种情况下是网关),而“/hadoop\u foo/”位于hdfs中。与“hdfs:///hadoop\u foo/”相同。
在阅读了如何为hdfs递归列出子目录之后,我想知道是否有一种方法可以执行:
hadoop dfs -lsr /hadoop_foo/
在代码中。。
从将两个浮点数写入常规txt的正确方式来看:
In [28]: os.getcwd()
Out[28]: '/homes/gsamaras' <-- which is my local directory
1条答案
按热度按时间wz8daaqr1#
与python一起使用hdfs模块;walk()方法可以获取文件列表。
代码应该是这样的:
使用scala可以获得文件系统(
val fs = FileSystem.get(new Configuration())
)然后跑https://hadoop.apache.org/docs/r2.4.1/api/org/apache/hadoop/fs/filesystem.html#listfiles(org.apache.hadoop.fs.path,布尔值)也可以使用os.subprocess从脚本中执行shell命令,但这不是推荐的方法,因为这里依赖shell实用程序的文本输出。
最终,对op有效的是使用subprocess.check\u output():