2016-12-24 2 views
0

Nous utilisons le lecteur Spark CSV pour lire le fichier CSV à convertir en tant que DataFrame et nous exécutons le travail sur yarn-client, qui fonctionne correctement en mode local.Impossible de lire le fichier texte à partir du chemin d'accès local - Lecteur Spark CSV

Nous soumettons le travail d'allumage dans edge node. Mais quand nous plaçons le fichier dans le chemin du fichier local au lieu de HDFS, nous obtenons l'exception de fichier non trouvé.

code:

sqlContext.read.format("com.databricks.spark.csv") 
     .option("header", "true").option("inferSchema", "true") 
     .load("file:/filepath/file.csv") 

Nous avons aussi essayé file:///, mais nous obtenons la même erreur.

journal d'erreur:

2016-12-24 16:05:40,044 WARN [task-result-getter-0] scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, hklvadcnc06.hk.standardchartered.com): java.io.FileNotFoundException: File file:/shared/sample1.csv does not exist 
     at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:609) 
     at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:822) 
     at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:599) 
     at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:421) 
     at org.apache.hadoop.fs.ChecksumFileSystem$ChecksumFSInputChecker.<init>(ChecksumFileSystem.java:140) 
     at org.apache.hadoop.fs.ChecksumFileSystem.open(ChecksumFileSystem.java:341) 
     at org.apache.hadoop.fs.FileSystem.open(FileSystem.java:767) 
     at org.apache.hadoop.mapred.LineRecordReader.<init>(LineRecordReader.java:109) 
     at org.apache.hadoop.mapred.TextInputFormat.getRecordReader(TextInputFormat.java:67) 
     at org.apache.spark.rdd.HadoopRDD$$anon$1.<init>(HadoopRDD.scala:241) 
     at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:212) 
     at org.apache.spark.rdd.HadoopRDD.compute(HadoopRDD.scala:101) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) 
     at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) 
     at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:38) 
     at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:313) 
     at org.apache.spark.rdd.RDD.iterator(RDD.scala:277) 
     at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66) 
     at org.apache.spark.scheduler.Task.run(Task.scala:89) 
     at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
+0

ce fichier existe-t-il à cet emplacement? – mrsrinivas

+0

@mrsrinivas: oui c'est disponible, c'est pourquoi quand je cours le travail dans le cluster de fils en mode local, il fonctionne bien, seulement il ne fonctionne pas en mode filaire-client. – Shankar

+1

En temps normal, il doit fonctionner comme vous l'avez essayé. Cependant, si l'intention est de le faire fonctionner, essayez [SparkFiles] (https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/SparkFiles.html) votre cas quelque chose comme celui-ci 'org.apache.spark.SparkFiles d'importation SparkContext.addFile ("file: /filepath/file.csv") println (SparkFiles.getRootDirectory()) println (SparkFiles.get ("file.csv")) sqlContext.read.format ("com.databricks.spark.csv") .option ("en-tête", "true"). Option ("inferSchema", "true") .load (SparkFiles.get ("file.csv")) ' –

Répondre

1

oui ceci fonctionne bien en mode local mais nœud de bord il ne fonctionnera pas. Parce que de nœud de bord le fichier local n'est pas accessible. HDFS rend le fichier accessible en spécifiant l'URL du fichier.

+0

Cela signifie que nous ne pouvons pas lire les fichiers de Linux chemin du fichier, seul l'emplacement hdfs devrait être utilisé pour lire les fichiers? – Shankar

+0

TBO Je n'ai jamais essayé ça. Qu'est-ce qui se passe réellement, c'est que le chemin que vous fournissez pour le fichier doit être accessible au maître et au nœud de travail si les nœuds ne peuvent pas accéder au fichier, alors vous êtes confronté à de tels problèmes. Maintenant, cette question est basée sur le réseautage. Si vous pouvez rendre votre fichier local accessible au maître et au nœud de travail, vous ne rencontrez pas ce problème. –