Je copie une arborescence de fichiers de S3 vers HDFS avec S3DistCP dans une étape EMR initiale. hdfs dfs -ls -R hdfs:///data_dir
montre les fichiers attendus, ce qui ressemble à quelque chose comme:Comment éviter les exceptions "Pas un fichier" lors de la lecture de HDFS avec étincelle
/data_dir/year=2015/
/data_dir/year=2015/month=01/
/data_dir/year=2015/month=01/day=01/
/data_dir/year=2015/month=01/day=01/data01.12345678
/data_dir/year=2015/month=01/day=01/data02.12345678
/data_dir/year=2015/month=01/day=01/data03.12345678
Les « répertoires » sont répertoriés sous forme de fichiers de zéro octet. Je lance ensuite une étincelle qui doit lire ces fichiers. Le code de chargement est ainsi:
sqlctx.read.json('hdfs:///data_dir, schema=schema)
Le travail échoue avec une exception java
java.io.IOException: Not a file: hdfs://10.159.123.38:9000/data_dir/year=2015
J'ai eu (peut-être naïvement) suppose que étincelle récursive descendre le « arbre dir » et charger les fichiers de données. Si je pointe vers S3, il charge les données avec succès.
Ai-je mal compris HDFS? Puis-je demander à spark d'ignorer les fichiers de zéro octet? Puis-je utiliser S3DistCp pour aplatir l'arbre?
Je ne peux pas dire pour API DataFrame, mais en Spark pur, c'est-à-dire avec RDD, vous pouvez charger tous les fichiers dans un répertoire avec 'SparkContext.wholeTextFiles (* path *)', voir [docs] (http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.SparkContext) pour plus d'informations . – mehmetminanc
Que diriez-vous de "/data_dir/*/*/*/*.*"? De mon expérience spark ne charge pas les fichiers récursivement dans les sous-répertoires. – WoodChopper
@WoodChopper Merci, vous avez raison. Le pilote HDFS ne descend pas récursivement la hiérarchie de fichiers. –