我正在开发一个集群,其中数据集以分布式方式保存在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|
所以,我想要做的是计算原始数据文件数据中的总行数.我的理解是像00000,part-00001等分布式块有重叠.因此,只计算part-xxxx文件中的行数并对它们求和将不起作用.原始数据集数据的大小约为70GB.如何有效地找出总行数?
更有效率 – 您可以使用spark来计算数量.的线条.以下代码段有助于计算行数.
text_file = spark.textFile("hdfs://...") count = text_file.count(); count.dump();
这显示了没有的计数.的线条.
注意:不同零件文件中的数据不会重叠
使用hdfs dfs -cat / bdatest / clm / data / part- * | wc -l也会为您提供输出,但这会将所有数据转储到本地计算机并花费更长的时间.
最好的解决方案是使用MapReduce或spark. MapReduce需要更长的时间来开发和执行.如果安装了火花,这是最好的选择.