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(); }