Je suis le grand tutoriel sur les étincelles
donc j'essaye à 46m: 00s de charger le README.md
mais échoue à ce que je fais 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 ça README.md
?
La réponse de gonbe est excellente. Mais je veux quand même mentionner que
file:///
=~/../../
, non$SPARK_HOME
. J'espère que cela pourrait faire gagner du temps aux novices comme moi.la source
file:///
est le dossier racine du système de fichiers vu par la machine virtuelle Java en cours d'exécution, et non deux niveaux au-dessus du dossier de base. Le format URI tel que spécifié dans la RFC 8089 estfile://hostname/absolute/path
. Dans le cas local, lehostname
composant (autorité) est vide.Bien que Spark prenne en charge le chargement de fichiers à partir du système de fichiers local, il nécessite que les fichiers soient 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 la couche NFS de MapR, sont exposés à l'utilisateur comme un système de fichiers normal.
Si vos données sont déjà dans l'un de ces systèmes, vous pouvez les utiliser comme entrée en spécifiant simplement un fichier: // chemin; Spark le gérera tant que le système de fichiers est monté sur le même chemin 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 localement sur le pilote sans passer par Spark, puis appeler parallelize pour distribuer le contenu aux nœuds de calcul
Veillez à mettre file: // devant et à utiliser "/" ou "\" selon OS.
la source
Il vous suffit de spécifier le chemin du fichier comme "fichier: /// répertoire / fichier"
exemple:
la source
Attention:
Assurez-vous que vous exécutez spark en mode local lorsque vous chargez des données à partir de local (
sc.textFile("file:///path to the file/")
) ou vous obtiendrez une erreur comme celle-ciCaused by: java.io.FileNotFoundException: File file:/data/sparkjob/config2.properties does not exist
. Parce que les exécuteurs exécutés sur différents workers ne trouveront pas ce fichier dans son chemin local.la source
Si le fichier se trouve dans votre nœud maître Spark (par exemple, en cas d'utilisation d'AWS EMR), lancez d'abord le spark-shell en mode local.
Sinon, vous pouvez d'abord copier le fichier sur HDFS à partir du système de fichiers local, puis lancer Spark dans son mode par défaut (par exemple, YARN en cas d'utilisation d'AWS EMR) pour lire le fichier directement.
la source
J'ai un fichier appelé NewsArticle.txt sur mon bureau.
Dans Spark, j'ai tapé:
J'avais besoin de changer tous les caractères \ à / pour le chemin du fichier.
Pour tester si cela fonctionnait, j'ai tapé:
J'utilise Windows 7 et je n'ai pas installé Hadoop.
la source
Cela a été discuté dans la liste de diffusion Spark, et veuillez vous référer à ce courrier .
Vous devez utiliser
hadoop fs -put <localsrc> ... <dst>
copier le fichier danshdfs
:la source
Cela m'est arrivé avec Spark 2.3 avec Hadoop également installé dans le répertoire de base de l'utilisateur commun "hadoop". Puisque Spark et Hadoop ont été installés dans le même répertoire commun, Spark considère par défaut le schéma comme
hdfs
, et commence à rechercher les fichiers d'entrée sous hdfs comme spécifié parfs.defaultFS
dans Hadoopcore-site.xml
. Dans de tels cas, nous devons spécifier explicitement le schéma commefile:///<absoloute path to file>
.la source
Voici la solution pour cette erreur que j'obtenais sur le cluster Spark qui est hébergé dans Azure sur un cluster Windows:
Chargez le fichier brut HVAC.csv, analysez-le à l'aide de la fonction
Nous utilisons (wasb: ///) pour permettre à Hadoop d'accéder au fichier de stockage du blog Azure et les trois barres obliques sont une référence relative au dossier du conteneur de nœud en cours d'exécution.
Par exemple: Si le chemin d'accès à votre fichier dans l'Explorateur de fichiers dans le tableau de bord du cluster Spark est:
sflcc1 \ sflccspark1 \ HdiSamples \ SensorSampleData \ hvac
Donc, pour décrire le chemin, c'est comme suit: sflcc1: est le nom du compte de stockage. sflccspark: est le nom du nœud du cluster.
Nous nous référons donc au nom du nœud de cluster actuel avec les trois barres obliques relatives.
J'espère que cela t'aides.
la source
Si vous essayez de lire le fichier sous forme HDFS. essayer de définir le chemin dans SparkConf
la source
Vous n'avez pas besoin d'utiliser sc.textFile (...) pour convertir des fichiers locaux en dataframes. L'une des options est de lire un fichier local ligne par ligne, puis de le transformer en ensemble de données Spark. Voici un exemple de machine Windows en Java:
Vous pouvez maintenant utiliser dataframe
data
dans votre code.la source
J'ai essayé ce qui suit et cela a fonctionné à partir de mon système de fichiers local. Fondamentalement, Spark peut lire à partir du chemin local, HDFS et AWS S3
la source
essayer
la source
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
on the bash shellbash-4.1#