2016-12-24 2 views
0

Wir verwenden Spark CSV Reader, um die CSV-Datei zu lesen, um sie als DataFrame zu konvertieren, und wir führen den Job unter yarn-client aus, der im lokalen Modus funktioniert.Textdatei kann nicht vom lokalen Dateipfad gelesen werden - Spark CSV-Reader

Wir senden den Funkenjob in edge node.

Aber wenn wir die Datei in lokalen Dateipfad statt HDFS platzieren, erhalten wir Datei Ausnahme nicht gefunden.

Code:

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

Wir haben auch versucht file:///, aber noch sind wir die gleichen Fehler.

Fehlerprotokoll:

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

existiert diese Datei an diesem Ort? – mrsrinivas

+0

@mrsrinivas: ja es ist verfügbar, das ist, warum, wenn ich den Job in Garn-Cluster im lokalen Modus laufen, funktioniert es gut, nur funktioniert es nicht im Garn-Client-Modus. – Shankar

+1

Im Normalfall muss es so funktionieren, wie Sie es versucht haben. Wenn es jedoch beabsichtigt ist, damit es funktioniert, versuchen Sie [SparkFiles] (https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/SparkFiles.html) Ihren Fall etwas wie dies 'Import org.apache.spark.SparkFiles SparkContext.addFile ("file: /filepath/file.csv") println (SparkFiles.getRootDirectory()) println (SparkFiles.get ("file.csv")) sqlContext.read.format ("com.databricks.spark.csv") .option ("header", "true"). Option ("inferSchema", "true") .load (SparkFiles.get ("file.csv")) ' –

Antwort

1

ja dies wird im lokalen Modus funktioniert aber auf Randknoten es wird nicht funktionieren. Da von Edge-Knoten die lokale Datei nicht zugänglich ist. HDFS macht die Datei zugänglich, indem sie die URL der Datei angibt.

+0

Bedeutet es, dass wir keine Dateien von Linux lesen können Dateipfad, nur hdfs Speicherort sollte verwendet werden, um Dateien zu lesen? – Shankar

+0

TBO Ich habe das nie versucht. Was tatsächlich passiert, ist, dass der Pfad, den Sie für die Datei bereitstellen, für den Master- und Worker-Knoten zugänglich sein muss, wenn die Knoten nicht auf die Datei zugreifen können und Sie mit solchen Problemen konfrontiert werden. Jetzt basiert diese Frage auf der Vernetzung. Wenn Sie Ihre lokale Datei für den Master- und den Worker-Knoten zugänglich machen können, besteht kein Problem. –

Verwandte Themen