获取几行HDFS数据

时间:2014-02-28 09:15:52

标签: hadoop hdfs

我的2 GB中有HDFS个数据。

是否有可能随机获取该数据。 就像我们在Unix命令行中那样做

cat iris2.csv |head -n 50

9 个答案:

答案 0 :(得分:31)

原生

hadoop fs -cat /your/file | head

在这里效率很高,因为只要 head 读完所有行,cat就会关闭流。

要获得,hadoop中有一个特殊的有效命令:

hadoop fs -tail /your/file

不幸的是,它会返回数据的最后一千字节,而不是给定的行数。

答案 1 :(得分:5)

Linux上的headtail命令分别显示前10行和后10行。但是,这两个命令的输出不是随机采样的,它们的顺序与文件本身的顺序相同。

Linux shuffle - shuf命令帮助我们生成输入行的随机排列&将此与Hadoop命令结合使用会很有帮助,如下所示:

$ hadoop fs -cat <file_path_on_hdfs> | shuf -n <N>

因此,在这种情况下,如果iris2.csv是HDFS上的文件,并且您希望从数据集中随机抽样50行:

$ hadoop fs -cat /file_path_on_hdfs/iris2.csv | shuf -n 50

注意:也可以使用Linux sort命令,但shuf命令更快,并且可以更好地随机采样数据。

答案 2 :(得分:1)

hdfs dfs -cat yourFile | shuf -n <number_of_line>

会为你做的伎俩。虽然它在mac os上没有。您可以安装GNU coreutils。

答案 3 :(得分:0)

我的建议是将数据加载到Hive表中,然后你可以这样做:

SELECT column1, column2 FROM (
    SELECT iris2.column1, iris2.column2, rand() AS r
    FROM iris2
    ORDER BY r
) t
LIMIT 50;

编辑: 这是该查询的更简单版本:

SELECT iris2.column1, iris2.column2
FROM iris2
ORDER BY rand()
LIMIT 50;

答案 4 :(得分:0)

编写此命令

sudo -u hdfs hdfs dfs -cat "path of csv file" |head -n 50

50是行数(这可以由用户根据要求自定义)

答案 5 :(得分:0)

您也可以在Hadoop中使用head命令!语法为

hdfs dfs -cat <hdfs_filename> | head -n 3

这只会从文件中打印三行。

答案 6 :(得分:0)

工作代码:

hadoop fs -cat /tmp/a/b/20200630.xls | head -n 10

hadoop fs -cat /tmp/a/b/20200630.xls | tail -3

答案 7 :(得分:0)

我在HDFS群集上使用avro文件的尾巴和猫,但是结果没有以正确的编码打印。我尝试了这个,对我来说很好。

hdfs dfs -text hdfs://<path_of_directory>/part-m-00000.avro | head -n 1

将1更改为较大的整数可从avro文件中打印更多样本。

答案 8 :(得分:-1)

hadoop fs -cat  /user/hive/warehouse/vamshi_customers/* |tail

我认为按照@Viacheslav Rodionov发布的答案,头部工作正常,但对于尾部,我发布的效果很好。