我的2 GB
中有HDFS
个数据。
是否有可能随机获取该数据。 就像我们在Unix命令行中那样做
cat iris2.csv |head -n 50
答案 0 :(得分:31)
原生头
hadoop fs -cat /your/file | head
在这里效率很高,因为只要 head 读完所有行,cat就会关闭流。
要获得尾,hadoop中有一个特殊的有效命令:
hadoop fs -tail /your/file
不幸的是,它会返回数据的最后一千字节,而不是给定的行数。
答案 1 :(得分:5)
Linux上的head
和tail
命令分别显示前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发布的答案,头部工作正常,但对于尾部,我发布的效果很好。