无法在 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 中的问题并且已经提出了一个问题。

https://issues.apache.org/jira/browse/SPARK-15899