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
Könnten Sie versuchen, mit '/ tmp/home/mycsv.csv'? –
@AlbertoBonsanto, dies löst 'org.apache.spark.sql.AnalysisException: Pfad existiert nicht: file: /tmp/home/mycsv.csv;' exception – Aiden
Was ist mit 'hdfs: //tmp/home/mycsv.csv '? –