2014-02-28 40 views
4

我的2 GB數據在我的HDFS中。獲取幾行HDFS數據

是否有可能隨機獲取該數據。 就像我們在Unix命令行做

cat iris2.csv |head -n 50 
+3

-n 2不給出隨機數據......它返回前兩行。 – Jasper

回答

15

本地

hadoop fs -cat /your/file | head 

在這裏效率很高,因爲貓會盡快關閉流將完成閱讀所有行。

爲了得到存在Hadoop的一個特殊有效的命令:

hadoop fs -tail /your/file 

不幸的是它返回的數據,而不是一個給定的行數的最後一個千字節。

0

我的建議是要加載數據到蜂巢表,那麼你可以做這樣的事情:

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; 
0

寫入該命令

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

50是行數

4

head和Linux上tail命令顯示所述第一10和最後10(這可以通過基於所述要求用戶定製)線。但是,這兩個命令的輸出不是隨機採樣的,它們的順序與文件本身的順序相同。

Linux的洗牌 - 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命令更快,並且可以更好地隨機抽樣數據。

+1

這是正確的答案,因爲沒有其他答案談論洗牌。 –

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

會爲你做伎倆。雖然它不適用於mac os。你可以安裝GNU coreutils。