Spark 2.0:绝对URI中的相对path(spark-warehouse)

我试图从Spark 1.6.1迁移到Spark 2.0.0,并且在尝试将csv文件读入SparkSQL时出现奇怪的错误。 以前,当我从pyspark的本地磁盘读取文件时,我会这样做:

Spark 1.6

df = sqlContext.read \ .format('com.databricks.spark.csv') \ .option('header', 'true') \ .load('file:///C:/path/to/my/file.csv', schema=mySchema) 

在最新版本中,我认为它应该是这样的:

Spark 2.0

 spark = SparkSession.builder \ .master('local[*]') \ .appName('My App') \ .getOrCreate() df = spark.read \ .format('csv') \ .option('header', 'true') \ .load('file:///C:/path/to/my/file.csv', schema=mySchema) 

但是我得到这个错误,无论我尝试调整path有多less种不同的方式:

 IllegalArgumentException: 'java.net.URISyntaxException: Relative path in absolute URI: file:/C:/path//to/my/file/spark-warehouse' 

不知道这只是Windows的一个问题,或者是我缺less的东西。 我很兴奋spark-csv软件包现在成为Spark的一部分,但我似乎无法再读取我的本地文件。 有任何想法吗?

Solutions Collecting From Web of "Spark 2.0:绝对URI中的相对path(spark-warehouse)"

我能够在最新的Spark文档中进行一些挖掘,并且我注意到他们有一个我之前没有注意到的新配置设置:

 spark.sql.warehouse.dir 

所以,当我设置我的SparkSession时,我继续添加了这个设置:

 spark = SparkSession.builder \ .master('local[*]') \ .appName('My App') \ .config('spark.sql.warehouse.dir', 'file:///C:/path/to/my/') \ .getOrCreate() 

这似乎设置工作目录,然后我可以直接提供我的文件名到csv阅读器:

 df = spark.read \ .format('csv') \ .option('header', 'true') \ .load('file.csv', schema=mySchema) 

一旦我设置了火花仓库,Spark就能够找到我所有的文件,并且我的应用程序现在可以成功完成。 令人惊讶的是,它的运行速度比Spark 1.6快了近20倍。 所以他们真的做了一些令人印象深刻的工作来优化他们的SQL引擎 启动它!