web-dev-qa-db-ja.com

HDFSデータの数行を取得する

私は2 GB私のHDFSのデータ。

そのデータをランダムに取得することは可能ですか? Unixコマンドラインで行うように

cat iris2.csv |head -n 50
14

ネイティブヘッド

hadoop fs -cat /your/file | head

headがすべての行の読み取りを終了するとすぐにcatはストリームを閉じるため、ここでは効率的です。

tailを取得するには、hadoopに特別な効果的なコマンドがあります。

hadoop fs -tail /your/file

残念ながら、指定された行数ではなく、データの最後のキロバイトを返します。

33

Linuxのheadおよびtailコマンドは、それぞれ最初の10行と最後の10行を表示します。ただし、これら2つのコマンドの出力はランダムにサンプリングされるのではなく、ファイル自体と同じ順序です。

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コマンドの方が高速で、ランダムにデータをサンプリングできます。

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

あなたのためのトリックを行います。MacOSでは利用できませんが。インストールできますGNU coreutils。

1
John Doe

私の提案は、そのデータを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;
0
wlk

このコマンドを書く

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

50は行数です(要件に基づいてユーザーがカスタマイズできます)

0
Mohit Singh

Hadoopでもheadコマンドを使用できます!構文は

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

これにより、ファイルから3行のみが印刷されます。

0
Piyush P