Comment charger un fichier local dans sc.texte, au lieu de HDFS
Je suis la suite de la grande spark tutoriel
donc j'essaye en 46m:00s pour charger le README.md
mais ne parviennent pas à ce que je fais, c'est ceci:
$ sudo docker run -i -t -h sandbox sequenceiq/spark:1.1.0 /etc/bootstrap.sh -bash
bash-4.1# cd /usr/local/spark-1.1.0-bin-hadoop2.4
bash-4.1# ls README.md
README.md
bash-4.1# ./bin/spark-shell
scala> val f = sc.textFile("README.md")
14/12/04 12:11:14 INFO storage.MemoryStore: ensureFreeSpace(164073) called with curMem=0, maxMem=278302556
14/12/04 12:11:14 INFO storage.MemoryStore: Block broadcast_0 stored as values in memory (estimated size 160.2 KB, free 265.3 MB)
f: org.apache.spark.rdd.RDD[String] = README.md MappedRDD[1] at textFile at <console>:12
scala> val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md
at org.apache.hadoop.mapred.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:285)
comment puis-je charger que README.md
?
Vous devez vous connecter pour publier un commentaire.
Essayez de spécifier explicitement
sc.textFile("file:///path to the file/")
. L'erreur se produit lorsque de l'environnement Hadoop est réglé.SparkContext.texte appelle en interne
org.apache.hadoop.mapred.FileInputFormat.getSplits
, qui à son tour utiliseorg.apache.hadoop.fs.getDefaultUri
si le schéma est absent. Cette méthode lit "fs.defaultFS" paramètre de Hadoop conf. Si vous définissez HADOOP_CONF_DIR variable d'environnement, le paramètre est généralement défini comme "hdfs://...", sinon "file://".gonbe la réponse est excellente. Mais encore, je tiens à mentionner que
file:///
=~/../../
, pas$SPARK_HOME
. Espérons que cela pourrait faire gagner du temps pour les newbs comme moi.file:///
est le dossier racine du système de fichiers, tel que vu par l'exécution de la JVM, pas deux niveaux au-dessus de la maison de dossier. Le format URI spécifié dans RFC 8089 estfile://hostname/absolute/path
. Dans le cas de lahostname
(autorité) est vide.Tandis que l'Étincelle prend en charge le chargement des fichiers à partir du système de fichiers local, il faut que les fichiers sont disponibles sur le même chemin sur tous les nœuds de votre cluster.
Certains systèmes de fichiers réseau, comme NFS, AFS, et MapR NFS couche, sont exposés à l'utilisateur comme un ordinaire système de fichiers.
Si vos données sont déjà dans l'un de ces systèmes, vous pouvez l'utiliser comme une entrée par le simple fait de spécifier un file:// chemin; Étincelle va la traiter tant que le système de fichiers est monté dans le même chemin d'accès sur chaque nœud. Chaque nœud doit avoir le même chemin
Si votre fichier n'est pas déjà sur tous les nœuds du cluster, vous pouvez le charger en local sur le pilote sans passer par Étincelle et ensuite appeler paralléliser pour distribuer le contenu aux travailleurs
Prendre soin de placer le fichier://à l'avant et à l'utilisation de "/" ou "\" selon les OS.
Vous avez juste besoin de spécifier le chemin d'accès du fichier "fichier:///répertoire/fichier"
exemple:
À l'Attention de:
Assurez-vous que vous exécutez étincelle en mode local lorsque vous chargez des données locales(
sc.textFile("file:///path to the file/")
) ou vous obtiendrez une erreur comme ceciCaused by: java.io.FileNotFoundException: File file:/data/sparkjob/config2.properties does not exist
.Becasuse exécuteurs qui s'exécutent sur différents travailleurs de ne pas trouver ce fichier dans le chemin d'accès local.
J'ai un fichier appelé NewsArticle.txt sur mon Bureau.
Spark, j'ai tapé:
J'avais besoin de changer tous les \ vers /de caractères pour le chemin.
Pour tester si cela a fonctionné, j'ai tapé:
Je suis sous Windows 7 et je n'ai pas Hadoop installé.
Si le fichier se trouve dans votre Étincelle nœud maître (par exemple, dans le cas de l'utilisation d'AWS EMR), puis de lancer l'étincelle-shell en mode local la première.
Alternativement, vous pouvez d'abord copier le fichier HDFS le système de fichiers local, puis de lancer l'Étincelle dans son mode par défaut (par exemple, de FIL dans le cas de l'utilisation d'AWS DME) pour lire le fichier directement.
Cela a été discuté dans spark liste de diffusion, et s'il vous plaît consulter cette mail.
Vous devez utiliser
hadoop fs -put <localsrc> ... <dst>
copier le fichier danshdfs
:Ce qui m'est arrivé avec Spark 2.3 avec Hadoop aussi installé sous la commune "hadoop" répertoire principal de l'utilisateur.Depuis deux Étincelle et Hadoop a été installé sous le même répertoire commun, une Étincelle par défaut considère que le régime de
hdfs
, et se lance à la recherche pour les fichiers d'entrée en vertu de la sf comme spécifié parfs.defaultFS
dans Hadoop estcore-site.xml
. En vertu de tels cas, nous avons besoin de spécifier explicitement le régime defile:///<absoloute path to file>
.C'est la solution pour cette erreur que j'ai fait sur la Spark cluster qui est hébergé dans Azure sur un cluster windows:
Charge les raw HVAC.fichier csv, l'analyser en utilisant la fonction
Nous utilisons (wasb:///) pour permettre Hadoop pour l'accès azure blog de stockage de fichiers et les trois barres obliques est une référence relative à l'exécution de nœud de dossier conteneur.
Par exemple: Si le chemin d'accès de votre fichier dans l'Explorateur de Fichiers dans Spark cluster tableau de bord est:
sflcc1\sflccspark1\HdiSamples\SensorSampleData\cvc
Afin de décrire le chemin est le suivant: sflcc1: est le nom du compte de stockage. sflccspark: est le nœud de cluster nom.
Si nous nous référons à l'actuel nœud de cluster nom avec les trois barres obliques.
Espère que cette aide.
Si vous essayez de lire forme de fichier HDFS. en essayant de réglage chemin dans SparkConf
Vous n'avez pas à utiliser sc.fichier texte(...) pour convertir des fichiers locaux dans dataframes. Une des options est, à la lecture d'un fichier local, ligne par ligne, puis de le transformer en Spark jeu de données. Voici un exemple pour une machine Windows en Java:
Maintenant, vous pouvez utiliser dataframe
data
dans votre code.J'ai essayé ce qui suit, et il a travaillé à partir de mon système de fichiers local.. en gros étincelle peut lire à partir de locaux, HDFS et AWS S3 chemin
essayer
scala> val f = sc.textFile("./README.md") 14/12/04 12:54:33 INFO storage.MemoryStore: ensureFreeSpace(81443) called with curMem=164073, maxMem=278302556 14/12/04 12:54:33 INFO storage.MemoryStore: Block broadcast_1 stored as values in memory (estimated size 79.5 KB, free 265.2 MB) f: org.apache.spark.rdd.RDD[String] = ./README.md MappedRDD[5] at textFile at <console>:12 scala> val wc = f.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://sandbox:9000/user/root/README.md at
pwd
sur le shell bashbash-4.1#