1.聚合函数:
2.UDF:User Defined Function
* 1、编写的UDF可以放到SQL语句的select部分,也可以作为where、groupBy或者having子句的一部分。
* 2、UDF是一个函数,但是UDF不仅仅是一个函数,有自己的特殊性:需要将UDF的参数看做数据表的某个列
* 3、在使用UDF时,不一定非要传入列,还可以传入常量
* spark.udf.register("largerThan", (z:String,number:Long) => z.toLong>number)
* 4、使用Dataset API和UDF的时候,上述注册方法,对DataFrame API不可见,改为下面的方法:
* val zipToLongUDF=udf((z:String) => z.toLong)
* val largerThanUDF = udf((z: String, number: Long) => z.toLong>number)
*zipDS.select(col("city"),zipToLongUDF(col("zip")).as("zipToLong"),largerThanUDF(col("zip"),lit("99923")).alias("largerThan")).orderBy(desc("zipToLong")).show();
*/
3.Spark On Hive
安装:
1、将hive_home/conf下面的hive-site.xml拷贝到spark_home/conf下面
2、将hadoop_home/etc/hadoop下面的hdfs-site.xml和core-site.xml拷贝到spark_home/conf下面
3、在拷贝到spark_home/conf所在节点上以local模式启动spark-sql
4、如果hive的metastore是mysql数据库,需要将mysql驱动放到spark_home/jars目录下面
5、开发环境:在项目中创建文件夹conf,将上述三个文件放入conf目录。如果hive的metastore是mysql数据库,需要将mysql驱动放到项目的类路径下
val spark = SparkSession .builder() .master("local[*]") .appName("Spark Hive Example")
.enableHiveSupport()//启用对hive的支持
.getOrCreate()
如果版本高于1.2.1,设置hive-site.xml中的属性,避免报错:

5、模块运行
不需要启动hive,需要启动HDFS,不需要启动YARN
6、Spark On Hive的内部机制
spark读取hive-site.xml配置文件,获得hive的metastore和warehouse相关信息。如果在hive-site.xml中没有定义,那么就会在当前目录创建一个metastore_db ,然后根据spark.sql.warehouse.dir 的值创建warehouse目录,默认的warehouse地址是/user/hive/warehouse。
Metastore的作用是:客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可