如何在hdfs命令中计算文件中的行?

Set*_*una 20 hadoop

我在HDFS上有一个文件,我想知道有多少行.(testfile的)

在linux中,我可以这样做:

wc -l <filename>
Run Code Online (Sandbox Code Playgroud)

我可以用"hadoop fs"命令做类似的事吗?我可以打印文件内容:

hadoop fs -text /user/mklein/testfile
Run Code Online (Sandbox Code Playgroud)

我怎么知道我有多少行?我想避免将文件复制到本地文件系统然后运行wc命令.

注意:我的文件使用snappy压缩进行压缩,这就是为什么我必须使用-text而不是-cat

小智 74

文件总数: hadoop fs -ls /path/to/hdfs/* | wc -l

总行数: hadoop fs -cat /path/to/hdfs/* | wc -l

给定文件的总行数: hadoop fs -cat /path/to/hdfs/filename | wc -l

  • 请注意,这会将hdfs文件夹中的所有数据提取到本地计算机并在本地执行行计数.如果数据量很大,由于网络IO和内存使用量的瓶颈,这可能会非常慢.对于大数据,map-reduce/pig方法会更好. (17认同)
  • 我更喜欢这个被接受的答案.接受的似乎是很多开销,这是完美的答案.做得好! (2认同)

San*_*ngh 6

1.映射器输出文件的行数:

`~]$ hadoop fs -cat /user/cloudera/output/part-m-00000 | wc -l`
Run Code Online (Sandbox Code Playgroud)

2. hdfs 上的文本或任何其他文件的行数:

`~]$ hadoop fs -cat /user/cloudera/output/abc.txt | wc -l`
Run Code Online (Sandbox Code Playgroud)

3. 在 hdfs 上的文本或任何其他文件的顶部(标题)5 行:

`~]$ hadoop fs -cat /user/cloudera/output/abc.txt | head -5`
Run Code Online (Sandbox Code Playgroud)

4. hdfs 上文本或任何其他文件的后 10 行:

`~]$ hadoop fs -cat /user/cloudera/output/abc.txt | tail -10`
Run Code Online (Sandbox Code Playgroud)


Vig*_*h I 5

您不能使用hadoop fs命令来执行此操作。要么你有写的MapReduce代码与逻辑在此解释还是这个猪脚本会有所帮助。

A = LOAD 'file' using PigStorage() as(...);
B = group A all;
cnt = foreach B generate COUNT(A);
Run Code Online (Sandbox Code Playgroud)

确保您的快照文件具有正确的扩展名,以便Pig可以检测并读取它。

  • 这不是真正正确的方法,简单的方法如下 (2认同)