【问题分析】 - 关于SparkSession使用createOrReplaceTempView 和 createGlobalTempView 创建临时表的区别的分析

1.官方文档

  1. 之前在练习一些例子的时候看到官方文档对这二者的定义是这样的

createOrReplaceTempView 的作用是创建一个临时的表 , 一旦创建这个表的会话关闭 , 这个表>也会立马消失 其他的SparkSession 不能共享应已经创建的临时表

createGlobalTempView 创建一个全局的临时表 , 这个表的生命周期是 整个Spark应用程序 ,
只要Spark 应用程序不关闭 , 那么. 这个临时表依然是可以使用的 ,并且这个表对其他的SparkSession共享

测试代码


    public static void main(String[] args) throws AnalysisException {
        // 一定要加上 , 配置Master为本地
        SparkConf conf = new SparkConf()
                .setAppName("Sql")
                .setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        // 设置输出日志等级
        sc.setLogLevel("WARN");

        // SparkSqlContext , HiveContext(Spark1.3以上建议用)
        // 1.创建一个SparkSession对象 , 类始于SparkContext
        SparkSession sparkSession = SparkSession
                .builder() // builder 是用来实例化一个SparkSession对象的
                .appName("SQL")
                .config("spark.some.config.option" , "some-value")
                .getOrCreate();

        // 第一个SparkSession 创建一个全局临时表
        Dataset<Row> df = sparkSession.read().json("SparkSql/src/main/resources/people.json");
        df.createGlobalTempView("people");
        // 会提示异常 : Table or view not found: `global_temp`.`people`; line 1 pos 17;
        df.createOrReplaceTempView("people");

        // 创建一个SparkSession02 因为创建的全局的临时视图 , 所以SparkSession02 也可以用 这个表
        SparkSession sparkSession02 = sparkSession.newSession();

        // 会报错 (No active SparkContext.) 原因可能是 SparkSession 内置的SparkContext也会被关闭
        //sparkSession.close();

        // 进行查询 共享临时表没问题
        sparkSession02.sql("select name from global_temp.people").show();

        sc.stop();
    }

测试结果

  • 当我 设置类全局的临时表 , 那么我在另外一个SparkSession 也可以执行 SparkSession.sql() 查询之前的SparkSession的表
  • 当我把创建全局临时表的SparkSession关闭后 , 原来的 就无法进行查询 报错的错误是
    会报错 (No active SparkContext.) 原因可能是 SparkSession 内置的SparkContext也会被关闭
  • 这里 如果创建的是临时表而不是全局的临时表 ,那么其他Session 也是没法用的
    会提示异常 : Table or view not found: global_temp.people; line 1 pos 17;

尚未搞明白的问题

所以现在没有搞明白的是 生命周期的问题 ,
全局临时表的生命周期的意思是不是 一个Session 关闭了 , 另外一个Session也能用 ? (我的理解)  
如何 在 将SparkSession 关闭的情况下 , 也可以使用其他的SparkSession 进行查询 ? 
还是我理解的生命周期有问题 ? 

更新中 …

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兀坐晴窗独饮茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值