欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 的提交方式 (源码给的例子没有设置, 误以为不需要设置)

  1. 在查询报错原因时发现还有一种 情况就是把 SparkContext 写到main方法外面, 当做公用的对象也会出现这个问题 这里记下来 以后避免 错误

2.解决方法

  1. 方法一 :
    直接添加 run configration中添加 -Dspark.master=local IDEA使用SparkSession读取Json文件报错 A master URL must be set in your configuration
  2. 方法二
    在创建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();
    

这样既可解决