unix - 使用命令行查找 hdfs 分布式文件中的总行数

标签 unix hadoop apache-spark hdfs

我在一个集群上工作,数据集以分布式方式保存在 hdfs 中。这是我所拥有的:

[hmi@bdadev-5 ~]$ hadoop fs -ls /bdatest/clm/data/
Found 1840 items
-rw-r--r--   3 bda supergroup          0 2015-08-11 00:32 /bdatest/clm/data/_SUCCESS
-rw-r--r--   3 bda supergroup   34404390 2015-08-11 00:32 /bdatest/clm/data/part-00000
-rw-r--r--   3 bda supergroup   34404062 2015-08-11 00:32 /bdatest/clm/data/part-00001
-rw-r--r--   3 bda supergroup   34404259 2015-08-11 00:32 /bdatest/clm/data/part-00002
....
....

数据的形式是:

[hmi@bdadev-5 ~]$ hadoop fs -cat /bdatest/clm/data/part-00000|head
V|485715986|1|8ca217a3d75d8236|Y|Y|Y|Y/1X||Trimode|SAMSUNG|1x/Trimode|High|Phone|N|Y|Y|Y|N|Basic|Basic|Basic|Basic|N|N|N|N|Y|N|Basic-Communicator|Y|Basic|N|Y|1X|Basic|1X|||SAM|Other|SCH-A870|SCH-A870|N|N|M2MC|

那么,我要做的就是统计原始数据文件data中的总行数。我的理解是像 part-00000part-00001 等分布式 block 有重叠。因此,仅仅计算 part-xxxx 文件中的行数并将它们相加是行不通的。此外,原始数据集 data 的大小为 ~70GB。如何有效地找出总行数?

最佳答案

更高效——您可以使用 spark 来计算次数。线。以下代码片段有助于计算行数。

text_file = spark.textFile("hdfs://...")
count = text_file.count();
count.dump();

这显示了 no 的计数。行数。

注意:不同part文件中的数据不会重叠

使用 hdfs dfs -cat/bdatest/clm/data/part-* | wc -l 也会为您提供输出,但这会将所有数据转储到本地计算机并且需要更长的时间。

最好的解决方案是使用 MapReduce 或 spark。 MapReduce 将需要更长的时间来开发和执行。如果安装了spark,这是最好的选择。

关于unix - 使用命令行查找 hdfs 分布式文件中的总行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32079372/

相关文章:

apache-spark - Pyspark 将 Dataframe 字符串列拆分为多列

objective-c - 如何判断进程是否在用户界面进程中?

unix - 查找包含 "grep"的特定单词出现的行号

unix - AIX 中是否有 EPOLL/KQUEUE 或等效机制?

hadoop - 使用 Hive 时为 "Too many fetch-failures"

hadoop - Pig - 解析 XML 文件

hadoop - HDFS联合身份验证和全新的HDFS集群之间有什么区别

scala - Spark GraphX 聚合求和

hadoop - Spark 作为 Hive 的引擎

linux - 进程锁定的文件的未定义时间戳