web-dev-qa-db-fra.com

Obtenez quelques lignes de données HDFS

J'ai des données 2 GB dans ma HDFS.

Est-il possible d'obtenir ces données au hasard. Comme nous le faisons dans la ligne de commande Unix 

cat iris2.csv |head -n 50
8
Unmesha SreeVeni

Native tête

hadoop fs -cat /your/file | head

est efficace ici, car cat fermera le flux dès que head finira de lire toutes les lignes.

Pour obtenir le tail il y a une commande efficace spéciale dans hadoop:

hadoop fs -tail /your/file

Malheureusement, il renvoie le dernier kilo-octet des données, pas un nombre donné de lignes.

28
Viacheslav Rodionov

Les commandes head et tail sous Linux affichent respectivement les 10 premières et les 10 dernières lignes. Cependant, la sortie de ces deux commandes n'est pas échantillonnée de manière aléatoire, elles sont dans le même ordre que dans le fichier lui-même.

La commande Linux shuffle - shuf nous aide à générer des permutations aléatoires de lignes d’entrée. L’utiliser conjointement avec les commandes Hadoop serait utile, comme ceci:

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

Par conséquent, dans ce cas, si iris2.csv est un fichier sur HDFS et que vous souhaitez échantillonner 50 lignes de manière aléatoire à partir du jeu de données:

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

Remarque: La commande Linux sort peut également être utilisée, mais la commande shuf est plus rapide et permet de mieux échantillonner les données de manière aléatoire.

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

Fera le tour pour vous. Bien que ce ne soit pas disponible sur Mac OS. Vous pouvez vous installer GNU coreutils.

1
John Doe

Ma suggestion serait de charger ces données dans la table Hive, alors vous pouvez faire quelque chose comme ceci:

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

EDIT: Ceci est une version simplifiée de cette requête:

SELECT iris2.column1, iris2.column2
FROM iris2
ORDER BY Rand()
LIMIT 50;
0
wlk

Écrire cette commande

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

50 correspond au nombre de lignes (personnalisable par l'utilisateur en fonction des besoins)

0
Mohit Singh

Vous pouvez aussi utiliser la commande principale dans Hadoop! La syntaxe serait 

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

Cela n'imprimera que trois lignes du fichier.

0
Piyush P