2016-08-08 28 views
1

Ich versuche, in einer TSV-Datei in ein Dataframe-Objekt mit dem folgenden Code zu lesen:Databricks funken csv-Check für leere Datei

SQLContext sqlContext = new SQLContext(javaSparkContext); 
Map<String, String> sqlContextOptions = new HashMap<>(); 
sqlContextOptions.put("header", "true"); 
sqlContextOptions.put("delimiter", "\t"); 
DataFrame df = sqlContext.read() 
     .format("com.databricks.spark.csv") 
     .options(sqlContextOptions) 
     .load(path); 

Gerade jetzt, wirft der Code eine UnsupportedOperationException wenn es eine leere Begegnungen Datei. Ich möchte mit leeren Dateien umgehen, aber ich möchte nicht davon ausgehen, dass diese Ausnahme immer eine leere Datei bedeutet. Wie überprüft man am besten, ob die angegebene Datei leer ist?

Antwort

1

Ich sehe nicht path explizit definiert, aber ich nehme an, es ist eine Zeichenfolge, die den Pfad zu einer Datei enthält. Wenn das der Fall ist, könnten Sie es in einem BufferedReader Objekt öffnen und prüfen, ob Sie daraus lesen können.

BufferedReader br = new BufferedReader(new FileReader(path));  
if (br.readLine() == null) { 
    // handle empty file... 
} else { 
    //do something... 
} 
+0

Also müssen Sie die Datei zuerst manuell überprüfen? Das ist eine Schande. Es fühlt sich an, als müsste etwas wie eine Überprüfung der leeren Datei eingebaut worden sein. – alexgbelov

+0

Ja, ich kenne keinen anderen Weg. Ich überprüfte die neueren Funktionen in Java 8, aber es gibt nichts (soweit ich dazu kam), das automatisch überprüfen würde. –