Spark SQL 2.0.0 坑 小记

Kirima ·
更新时间:2024-11-14
· 952 次阅读

问题出现

这个异常已在 Spakr SQL 2.0.1 中修复

使用 IDEA 配置好 Spark SQL 2.0.0 开始使用

// 构建会话 val ss: SparkSession =SparkSession.builder .master("local") .appName("Word Count") .getOrCreate() // 读取文件 val jsonData: DataFrame = ss.read.json("indata/data.json")

运行会产生一个路径异常

java.net.URISyntaxException: Relative path in absolute URI: file:E:/IdeaProject/SparkDemo/spark-warehouse 问题解决 // 构建 Spark SQL 会话 val ss: SparkSession = SparkSession.builder .master("local") .appName("Word Count") .config("spark.sql.warehouse.dir", "项目根路径") .getOrCreate() 问题解析

查看源码发现,这个问题出在 SQLConf.scala 里面

源码目录:org.apache.spark.sql.internal.SQLConf

提取相关源码

// 默认配置模板 val WAREHOUSE_PATH = SQLConfigBuilder("spark.sql.warehouse.dir") .doc("The default location for managed databases and tables.") .stringConf .createWithDefault("file:${system:user.dir}/spark-warehouse") // 替换 模板里的路径,问题就出现这个替换的上 def warehousePath: String = { getConf(WAREHOUSE_PATH).replace("${system:user.dir}", System.getProperty("user.dir")) }

我们可以把这段逻辑简化一下

使用这段代码 System.getProperty("user.dir") 替换路径,输出结果发现 其中的含有 \,这就是异常的原因

val path = "file:${system:user.dir}/spark-warehouse".replace("${system:user.dir}", System.getProperty("user.dir")) println(path) -------------- file:E:\IdeaProject\SparkDemo/spark-warehouse 官方修复动态

管方已在 Spark SQL 2.0.1 版本中修复这个BUG

修复代码如下

val WAREHOUSE_PATH = SQLConfigBuilder("spark.sql.warehouse.dir") .doc("The default location for managed databases and tables.") .stringConf .createWithDefault("${system:user.dir}/spark-warehouse") def warehousePath: String = { new Path(getConf(WAREHOUSE_PATH).replace("${system:user.dir}", System.getProperty("user.dir"))).toString }
作者:bigdataboy.cn



SQL spark

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章