spark sql在编译时是不包含hive表,开启hive依赖后,可以访问hive中的表以及UDF函数
通常我们用spark整合hive,说的是spark接管外部已经使用很长时间的hive,里面大大小小的表非常多,为了提高hive的查询效率,会使用spark来代替原来的mapreduce计算引擎,提升计算效率
可以看到就是下面的效果

看看idea中操作hive
首先是依赖
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.12</artifactId>
            <version>2.4.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
        </dependency>想在本地测试,结果idea上整半天没弄好,还是打包上传到集群运行的
import org.apache.spark.sql.SparkSession
object SparkSqlOnHive {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("SparkSqlOnHive")
      .config("spark.sql.shuffle.partitions", 1)
      //开启hive的元数据支持
      .enableHiveSupport()
      .getOrCreate()
    val df = spark.table("student")
    df.show()
    spark.close()
  }
}spark-submit --master yarn-client --class com.zh.SparkSqlOnHive Spark-1.0.jar运行成功

一个spark sql的执行流程大概是下图中的内容通过一系列转换成RDD











