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
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.
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.
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.
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;
É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)
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.