Estoy siguiendo el tutorial de Great Spark
así que estoy tratando a las 46m: 00s de cargar el README.md
pero no lo que estoy haciendo es esto:
$ 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)
¿cómo puedo cargar eso README.md
?
scala
apache-spark
Jas
fuente
fuente
La respuesta de Gonbe es excelente. Pero aún quiero mencionar que
file:///
=~/../../
, no$SPARK_HOME
. Espero que esto pueda ahorrar algo de tiempo para novatos como yo.fuente
file:///
es la carpeta raíz del sistema de archivos como la ve la JVM en ejecución, no dos niveles por encima de la carpeta de inicio. El formato de URI como se especifica en RFC 8089 esfile://hostname/absolute/path
. En el caso local, elhostname
componente (autoridad) está vacío.Si bien Spark admite la carga de archivos desde el sistema de archivos local, requiere que los archivos estén disponibles en la misma ruta en todos los nodos de su clúster.
Algunos sistemas de archivos de red, como NFS, AFS y la capa NFS de MapR, están expuestos al usuario como un sistema de archivos normal.
Si sus datos ya están en uno de estos sistemas, puede usarlos como entrada simplemente especificando un archivo: // ruta; Spark lo manejará siempre que el sistema de archivos esté montado en la misma ruta en cada nodo. Cada nodo debe tener la misma ruta
Si su archivo aún no está en todos los nodos del clúster, puede cargarlo localmente en el controlador sin pasar por Spark y luego llamar a paralelizar para distribuir el contenido a los trabajadores.
Tenga cuidado de poner file: // al principio y el uso de "/" o "\" según el sistema operativo.
fuente
Solo necesita especificar la ruta del archivo como "archivo: /// directorio / archivo"
ejemplo:
fuente
Atención:
Asegúrese de ejecutar Spark en modo local cuando cargue datos desde local (
sc.textFile("file:///path to the file/")
) o obtendrá un error como esteCaused by: java.io.FileNotFoundException: File file:/data/sparkjob/config2.properties does not exist
. Porque los ejecutores que se ejecutan en diferentes trabajadores no encontrarán este archivo en su ruta local.fuente
Si el archivo está ubicado en su nodo maestro de Spark (por ejemplo, en caso de usar AWS EMR), primero inicie Spark-Shell en modo local.
Alternativamente, primero puede copiar el archivo a HDFS desde el sistema de archivos local y luego iniciar Spark en su modo predeterminado (por ejemplo, YARN en caso de usar AWS EMR) para leer el archivo directamente.
fuente
Tengo un archivo llamado NewsArticle.txt en mi escritorio.
En Spark, escribí:
Necesitaba cambiar todo el carácter \ a / para la ruta del archivo.
Para probar si funcionó, escribí:
Estoy ejecutando Windows 7 y no tengo Hadoop instalado.
fuente
Esto se ha discutido en la lista de correo de Spark, y consulte este correo .
Debe usar
hadoop fs -put <localsrc> ... <dst>
copiar el archivo enhdfs
:fuente
Esto me ha sucedido con Spark 2.3 con Hadoop también instalado en el directorio de inicio del usuario común "hadoop". Dado que tanto Spark como Hadoop se instalaron en el mismo directorio común, Spark por defecto considera el esquema como
hdfs
y comienza a buscar los archivos de entrada bajo hdfs como se especificafs.defaultFS
en Hadoop'score-site.xml
. En tales casos, necesitamos especificar explícitamente el esquema comofile:///<absoloute path to file>
.fuente
Esta es la solución para este error que estaba obteniendo en el clúster Spark que está alojado en Azure en un clúster de Windows:
Cargue el archivo HVAC.csv sin procesar, analícelo usando la función
Usamos (wasb: ///) para permitir que Hadoop acceda al archivo de almacenamiento de blog azul y las tres barras diagonales son una referencia relativa a la carpeta del contenedor del nodo en ejecución.
Por ejemplo: si la ruta de su archivo en el Explorador de archivos en el panel del clúster de Spark es:
sflcc1 \ sflccspark1 \ HdiSamples \ SensorSampleData \ hvac
Entonces, para describir la ruta es la siguiente: sflcc1: es el nombre de la cuenta de almacenamiento. sflccspark: es el nombre del nodo del clúster.
Por tanto, nos referimos al nombre del nodo del clúster actual con las tres barras diagonales relativas.
Espero que esto ayude.
fuente
Si está intentando leer el archivo HDFS. intentando establecer la ruta en SparkConf
fuente
No es necesario utilizar sc.textFile (...) para convertir archivos locales en marcos de datos. Una de las opciones es leer un archivo local línea por línea y luego transformarlo en Spark Dataset. Aquí hay un ejemplo para una máquina Windows en Java:
Ahora puedes usar dataframe
data
en tu código.fuente
Intenté lo siguiente y funcionó desde mi sistema de archivos local ... Básicamente, Spark puede leer desde la ruta local, HDFS y AWS S3
fuente
tratar
fuente
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
en el bash shell?bash-4.1#