Estou seguindo o ótimo tutorial de faísca
então, estou tentando a 46m: 00s carregar o, README.md
mas não consigo o que estou fazendo:
$ 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)
como posso carregar isso README.md
?
scala
apache-spark
Jas
fonte
fonte
a resposta de gonbe é excelente. Mas ainda quero mencionar que
file:///
=~/../../
, não$SPARK_HOME
. Espero que isso possa economizar algum tempo para novatos como eu.fonte
file:///
é a pasta raiz do sistema de arquivos conforme vista pela JVM em execução, não dois níveis acima da pasta inicial. O formato URI conforme especificado no RFC 8089 éfile://hostname/absolute/path
. No caso local, ohostname
componente (autoridade) está vazio.Embora o Spark dê suporte ao carregamento de arquivos do sistema de arquivos local, ele requer que os arquivos estejam disponíveis no mesmo caminho em todos os nós do cluster.
Alguns sistemas de arquivos de rede, como NFS, AFS e a camada NFS do MapR, são expostos ao usuário como um sistema de arquivos regular.
Se seus dados já estiverem em um desses sistemas, você pode usá-los como uma entrada apenas especificando um arquivo: // caminho; O Spark cuidará disso, desde que o sistema de arquivos seja montado no mesmo caminho em cada nó. Cada nó precisa ter o mesmo caminho
Se o seu arquivo ainda não estiver em todos os nós do cluster, você pode carregá-lo localmente no driver sem passar pelo Spark e, em seguida, chamar o paralelize para distribuir o conteúdo aos trabalhadores
Tome cuidado ao colocar file: // na frente e usar "/" ou "\" de acordo com o sistema operacional.
fonte
Você precisa apenas especificar o caminho do arquivo como "arquivo: /// diretório / arquivo"
exemplo:
fonte
Atenção:
Certifique-se de executar o spark no modo local ao carregar dados de local (
sc.textFile("file:///path to the file/")
) ou obterá um erro como esteCaused by: java.io.FileNotFoundException: File file:/data/sparkjob/config2.properties does not exist
. Porque os executores que rodam em diferentes workers não irão encontrar este arquivo em seu caminho local.fonte
Se o arquivo estiver localizado em seu nó mestre Spark (por exemplo, no caso de usar AWS EMR), inicie o spark-shell no modo local primeiro.
Como alternativa, você pode primeiro copiar o arquivo para HDFS do sistema de arquivos local e, em seguida, iniciar o Spark em seu modo padrão (por exemplo, YARN no caso de usar AWS EMR) para ler o arquivo diretamente.
fonte
Eu tenho um arquivo chamado NewsArticle.txt na minha área de trabalho.
No Spark, digitei:
Eu precisava mudar todos os caracteres \ para / para o caminho de arquivo.
Para testar se funcionou, digitei:
Estou executando o Windows 7 e não tenho o Hadoop instalado.
fonte
Isso foi discutido na lista de discussão do Spark, consulte este e- mail .
Você deve
hadoop fs -put <localsrc> ... <dst>
copiar o arquivo emhdfs
:fonte
Isso aconteceu comigo com o Spark 2.3 e o Hadoop também instalado no diretório inicial do usuário "hadoop" comum. Como o Spark e o Hadoop foram instalados no mesmo diretório comum, o Spark, por padrão, considera o esquema como
hdfs
e começa a procurar os arquivos de entrada sob hdfs conforme especificado porfs.defaultFS
no Hadoop'score-site.xml
. Nesses casos, precisamos especificar explicitamente o esquema comofile:///<absoloute path to file>
.fonte
Esta é a solução para este erro que estava recebendo no cluster Spark que está hospedado no Azure em um cluster do Windows:
Carregue o arquivo HVAC.csv bruto, analise-o usando a função
Usamos (wasb: ///) para permitir que o Hadoop acesse o arquivo de armazenamento do blog do azure e as três barras são uma referência relativa à pasta do contêiner do nó em execução.
Por exemplo: se o caminho para seu arquivo no File Explorer no painel do cluster Spark for:
sflcc1 \ sflccspark1 \ HdiSamples \ SensorSampleData \ hvac
Portanto, para descrever o caminho é o seguinte: sflcc1: é o nome da conta de armazenamento. sflccspark: é o nome do nó do cluster.
Portanto, nos referimos ao nome do nó do cluster atual com as três barras relativas.
Espero que isto ajude.
fonte
Se você está tentando ler o arquivo do HDFS. tentando definir o caminho no SparkConf
fonte
Você não precisa usar sc.textFile (...) para converter arquivos locais em dataframes. Uma das opções é ler um arquivo local linha por linha e depois transformá-lo em Spark Dataset. Aqui está um exemplo para máquina Windows em Java:
Agora você pode usar dataframe
data
em seu código.fonte
Tentei o seguinte e funcionou no meu sistema de arquivos local. Basicamente, o Spark pode ler o caminho local, HDFS e AWS S3
fonte
experimentar
fonte
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
no shell bashbash-4.1#