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

Posted

技术标签:

【中文标题】Spark 2.0:绝对 URI 中的相对路径(spark-warehouse)【英文标题】:Spark 2.0: Relative path in absolute URI (spark-warehouse) 【发布时间】:2016-07-30 00:25:26 【问题描述】:

我正在尝试从 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)

但无论我尝试多少不同的方式调整路径,我都会收到此错误:

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

不确定这只是 Windows 的问题还是我遗漏了一些东西。我很高兴 spark-csv 包现在是 Spark 的一部分,开箱即用,但我似乎无法让它读取我的任何本地文件了。有什么想法吗?

【问题讨论】:

【参考方案1】:

我能够在最新的 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 就能够找到我的所有文件,并且我的应用程序现在成功完成。令人惊奇的是,它的运行速度比 Spark 1.6 快了大约 20 倍。所以他们确实做了一些非常令人印象深刻的工作来优化他们的 SQL 引擎。点燃它!

【讨论】:

spark.sql.warehouse.dir (default: $system:user.dir/spark-warehouse) 是托管数据库和表的 Hive 仓库目录(使用 Derby)的默认位置。 @Disco4Ever,先生,即使在设置了 hadoop fs -chmod -R 777 /tmp/hive/ 这没什么用处之后,您能帮我吗.... .config('spark.sql.warehouse .dir', 'file:///C:/path/to/my/') ***.com/questions/53100404/…

以上是关于Spark 2.0:绝对 URI 中的相对路径(spark-warehouse)的主要内容,如果未能解决你的问题,请参考以下文章

读取 csv 文件时 MS Databricks Spark 中绝对 URI 中的相对路径

Databricks 上的 PySpark 在绝对 URI 中获取相对路径:尝试使用 DateStamps 读取 Json 文件时

绝对 URI 中的相对路径:java.net.URI.checkPath(URI.java:1823)

失败:IllegalArgumentException java.net.URISyntaxException:绝对 URI 中的相对路径:

java.lang.IllegalArgumentException:java.net.URISyntaxException:绝对 URI 中的相对路径:用于 Talend 中的 Hbase

Android 文件绝对路径和Content开头的Uri互相转换