无法在 spark Dataframe 中从 HDFS 加载文件
Not able to load file from HDFS in spark Dataframe
我有一个 CSV 文件存储在本地 windows HDFS (hdfs://localhost:54310) 路径 /tmp/home/ 下。
我想从 HDFS 加载这个文件来激发 Dataframe。所以我尝试了 this
val spark = SparkSession.builder.master(masterName).appName(appName).getOrCreate()
然后是
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()
但在运行时失败并出现以下异常堆栈跟踪:
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.<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/ 是我的示例项目所在的路径。但是我指定了HDFS路径。
此外,这与普通的 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
我也找到并尝试了 ,但运气不好 :(
我错过了什么?为什么 spark 查看我的本地文件系统而不是 HDFS?
我在 hadoop-hdfs 2.7.2 和 scala 2.11 上使用 spark 2.0。
编辑: 我试图降级到 spark 1.6.2 的只是一个附加信息。我能够让它发挥作用。所以我认为这是 spark 2.0
中的错误
只是为了关闭 loop.This 似乎是 spark 2.0 中的问题并且已经提出了一个问题。
我有一个 CSV 文件存储在本地 windows HDFS (hdfs://localhost:54310) 路径 /tmp/home/ 下。 我想从 HDFS 加载这个文件来激发 Dataframe。所以我尝试了 this
val spark = SparkSession.builder.master(masterName).appName(appName).getOrCreate()
然后是
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()
但在运行时失败并出现以下异常堆栈跟踪:
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.<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/ 是我的示例项目所在的路径。但是我指定了HDFS路径。
此外,这与普通的 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
我也找到并尝试了
我错过了什么?为什么 spark 查看我的本地文件系统而不是 HDFS?
我在 hadoop-hdfs 2.7.2 和 scala 2.11 上使用 spark 2.0。
编辑: 我试图降级到 spark 1.6.2 的只是一个附加信息。我能够让它发挥作用。所以我认为这是 spark 2.0
中的错误只是为了关闭 loop.This 似乎是 spark 2.0 中的问题并且已经提出了一个问题。