我在一个集群上工作,数据集以分布式方式保存在 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-00000
、part-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/