hadoop fs -ls 仅存储文件的路径

问题描述 投票:0回答:4

我正在查看 Hadoop 文件系统。通过命令

hadoop fs -ls /path/to/dir1*

我将查看以

dir1
开头的每个目录并返回其文件

输出将类似于

Found 1 items
-rw-r--r-- 3 sys_blah_blah  moredate /path/to/dir10/file1.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah  moredate /path/to/dir10/file2.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah  moredate /path/to/dir10/file3.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah  moredate /path/to/dir11/file1.py
Found 1 items
-rw-r--r-- 3 sys_blah_blah  moredate /path/to/dir11/file2.py
...

我唯一感兴趣的信息是文件部分的路径。如何仅将路径存储到另一个文件中?理想情况下,我想要一个仅包含该文件内路径的文件的输出。

最初,我考虑运行命令并将其输出存储到文件中,然后解析新文件并使用正则表达式获取路径并将它们放入新文件中,但这似乎没有必要。

python bash hadoop
4个回答
2
投票

您可以在这里使用

grep
,因为
hadoop fs -ls
几乎不提供任何有用的选项。

hadoop fs -ls /path/to/dir1* | grep -oE "/(.*/)?" > outFile.dat

如果每条路径只需要一个条目,只需将其传递给

uniq
。例如:

hadoop fs -ls /path/to/dir1* | grep -oE "/(.*/)?" | uniq > outFile.dat

看起来很简单。


2
投票

我不太明白你的问题,但类似的事情应该可以让你开始

while read prot digit user group fn; do
   echo $(dirname "$fn")
done < <(hadoop fs -ls /path/to/dir1*)

0
投票

Hadoop 文件系统 API (org.apache.hadoop.fs) 可用于从 Java(任何其他兼容语言)检索 HDFS 数据,并可以完成后续操作(正则表达式)。

http://hadoop.apache.org/docs/stable/api/


0
投票

正如anirudh.vyas所建议的here

-C
选项也将仅输出路径:

hadoop fs -ls -C /path/
© www.soinside.com 2019 - 2024. All rights reserved.