2016-07-31 17 views
2

Ich habe eine CSV-Datei in lokalen Fenstern HDFS (hdfs: // localhost: 54310), unter Pfad/tmp/home/gespeichert. Ich möchte diese Datei von HDFS laden, um Dataframe zu zünden. Also habe ich versuchte thisDatei kann nicht aus HDFS in Spark geladen werden Dataframe

val spark = SparkSession.builder.master(masterName).appName(appName).getOrCreate()

und dann

val path = "hdfs://localhost:54310/tmp/home/mycsv.csv" 
import sparkSession.implicits._ 

spark.sqlContext.read 
    .format("com.databricks.spark.csv") 
    .option("header", "true") 
    .option("inferSchema", "true") 
    .load(path) 
    .show() 

aber nicht zur Laufzeit mit folgenden Ausnahme-Stack-Trace:

Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: file:C:/test/sampleApp/spark-warehouse 
at org.apache.hadoop.fs.Path.initialize(Path.java:205) 
at org.apache.hadoop.fs.Path.<init>(Path.java:171) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeQualifiedPath(SessionCatalog.scala:114) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.createDatabase(SessionCatalog.scala:145) 
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.<init>(SessionCatalog.scala:89) 
at org.apache.spark.sql.internal.SessionState.catalog$lzycompute(SessionState.scala:95) 
at org.apache.spark.sql.internal.SessionState.catalog(SessionState.scala:95) 
at org.apache.spark.sql.internal.SessionState$$anon$1.<init>(SessionState.scala:112) 
at org.apache.spark.sql.internal.SessionState.analyzer$lzycompute(SessionState.scala:112) 
at org.apache.spark.sql.internal.SessionState.analyzer(SessionState.scala:111) 
at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49) 
at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64) 
at org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:382) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:143) 
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:132) 

C:/test/SampleApp/ist der Pfad, in dem mein Beispielprojekt liegt. Aber ich habe den HDFS-Pfad angegeben.

Außerdem funktioniert das völlig in Ordnung, mit einfachen rdd

val path = "hdfs://localhost:54310/tmp/home/mycsv.csv" 
val sc = SparkContext.getOrCreate() 
val rdd = sc.textFile(path) 
println(rdd.first()) //prints first row of CSV file 

Ich fand und versuchte this als gut, aber kein Glück :(

Ich bin etwas fehlt? Warum Funken in meinem lokalen Dateisystem suchen & nicht die HDFS?

ich bin mit Funken 2.0 auf hadoop-hdfs 2.7.2 mit scala 2.11.

EDIT: Nur eine zusätzliche Info Ich habe versucht, zu 1.6.2 funken. Ich konnte es zum Laufen bringen. Also ich denke, das ist ein Fehler in spark 2.0

+0

Könnten Sie versuchen, mit '/ tmp/home/mycsv.csv'? –

+0

@AlbertoBonsanto, dies löst 'org.apache.spark.sql.AnalysisException: Pfad existiert nicht: file: /tmp/home/mycsv.csv;' exception – Aiden

+0

Was ist mit 'hdfs: //tmp/home/mycsv.csv '? –

Antwort