IDEA使用SparkSession读取Json文件报错 A master URL must be set in your configuration
程序员文章站
2022-07-12 14:20:07
...
1.错误场景
今天在学习SparkSql的时候 看了Spark源码的例子 在本地运行SparkSession读取json文件的时候 , 报 A master URL must be set in your configuration 这个错误
, 当时的代码如下
public class SqlDemo01 {
public static void main(String[] args) {
// SparkSqlContext , HiveContext(Spark1.3以上建议用)
// 1.创建一个SparkSession对象 , 类始于SparkContext
SparkSession sparkSession = SparkSession
.builder() // builder 是用来实例化一个SparkSession对象的
.appName("SQL")
.config("spark.some.config.option" , "some-value")
.getOrCreate();
runBasicDataFrameExample(sparkSession);
// 关闭SparkSession
sparkSession.stop();
}
// 使用DataFrame 读取数据
private static void runBasicDataFrameExample(SparkSession sparkSession){
// 从 resources 中读取json数据
String dataPath = "SparkSql/src/main/resources/people.json";
Dataset<Row> df = sparkSession.read().json(dataPath);
// 列出 DataFrame 的所有数据
df.show();
}
}
然后就报了 A master URL must be set in your configuration
这个错误
原因是没有设置 master 的提交方式 (源码给的例子没有设置, 误以为不需要设置)
- 在查询报错原因时发现还有一种 情况就是把 SparkContext 写到main方法外面, 当做公用的对象也会出现这个问题 这里记下来 以后避免 错误
2.解决方法
- 方法一 :
直接添加 run configration中添加-Dspark.master=local
- 方法二
在创建SparkSession实例之前 创建 SparkConf 和 SparkContext 并设置master
代码如下// 一定要加上 , 配置Master为本地 SparkConf conf = new SparkConf() .setAppName("Sql") .setMaster("local"); JavaSparkContext sc = new JavaSparkContext(conf); // SparkSqlContext , HiveContext(Spark1.3以上建议用) // 1.创建一个SparkSession对象 , 类始于SparkContext SparkSession sparkSession = SparkSession .builder() // builder 是用来实例化一个SparkSession对象的 .appName("SQL") .config("spark.some.config.option" , "some-value") .getOrCreate(); runBasicDataFrameExample(sparkSession); // 关闭SparkSession sparkSession.stop();
这样既可解决