【spark内置函数】lit和typedLit
一、说明
- typedlit内置函数在spark2.2.0版本开始出现。
- org.apache.spark.sql.functions.typedLit,可以添加List,Seq和Map类型的常量列。
- org.apache.spark.sql.functions.lit来添加简单类型(string,int,float,long,等)的常量列。
二、代码测试
package com.dt.spark.Testimport org.apache.spark.sql.expressions.UserDefinedFunction
import org.apache.spark.sql.{DataFrame, SparkSession}import scala.collection.mutableobject typedLitAndLitTest {case class Student(classId: Int, name: String, age: Int, birthday: String)def main(args: Array[String]): Unit = {val spark = SparkSession.builder().master("local[*]").appName("typedLitAndLitTest").getOrCreate()import spark.implicits._val sc = spark.sparkContextsc.setLogLevel("WARN")/*** 姓名|性别对应表*/val map = new mutable.HashMap[String, String]()map += ("zhangsan" -> "F")map += ("lisi" -> "M")map += ("wangwu" -> "F")/*** 创建学生DF*/val stuDF: DataFrame = Seq(Student(1001, "zhangsan", 20, "1995-12-11 12:12:13"),Student(1002, "lisi", 16, "2000-01-14 10:10:57"),Student(1003, "wangwu", 21, "1994-05-13 01:12:00")).toDF()import org.apache.spark.sql.functions._import spark.implicits._/*** 用户自定义函数:* 根据名字匹配性别。*/val findSexOfname: UserDefinedFunction = udf((name: String, map: scala.collection.immutable.Map[String, String]) => {map(name)})/*** lit和typedlit:* typedlit内置函数在spark2.2.0版本开始出现*org.apache.spark.sql.functions.typedLit,可以添加List,Seq和Map类型的常量列。* org.apache.spark.sql.functions.lit来添加简单类型(string,int,float,long,等)的常量列。*/stuDF.withColumn("classroom", lit("002")).withColumn("map", typedLit(map)).withColumn("sex", findSexOfname($"name", col("map"))).show(false)spark.stop()}
}
三、输出
+-------+--------+---+-------------------+---------+------------------------------------------+---+
|classId|name |age|birthday |classroom|map |sex|
+-------+--------+---+-------------------+---------+------------------------------------------+---+
|1001 |zhangsan|20 |1995-12-11 12:12:13|002 |Map(lisi -> M, zhangsan -> F, wangwu -> F)|F |
|1002 |lisi |16 |2000-01-14 10:10:57|002 |Map(lisi -> M, zhangsan -> F, wangwu -> F)|M |
|1003 |wangwu |21 |1994-05-13 01:12:00|002 |Map(lisi -> M, zhangsan -> F, wangwu -> F)|F |
+-------+--------+---+-------------------+---------+------------------------------------------+---+
四、遇到的问题
Caused by: java.lang.ClassCastException: scala.collection.immutable.Map$Map3 cannot be cast to scala.collection.mutable.HashMap
问题分析:
无论外部使用mutable.HashMap类型还是immutable.HashMap类型,传入列中都会统一变为immutable.Map类型,故在自定义函数接收时参数也一定要使用immutable.Map类型。
【spark内置函数】lit和typedLit相关推荐
- spark sql uv_内置函数_SparkSQL学习 - 编程那点事
Spark 1.5.x版本引入的内置函数在Spark 1.5.x版本,增加了一系列内置函数到DataFrame API中,并且实现了code-generation的优化.与普通的函数不同,DataFr ...
- Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
- Spark15:Spark SQL:DataFrame常见算子操作、DataFrame的sql操作、RDD转换为DataFrame、load和save操作、SaveMode、内置函数
前面我们学习了Spark中的Spark core,离线数据计算,下面我们来学习一下Spark中的Spark SQL. 一.Spark SQL Spark SQL和我们之前讲Hive的时候说的hive ...
- Spark SQL 内置函数(一)Array Functions(基于 Spark 3.2.0)
前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...
- SparkSQL内置函数
使用Spark SQL中的内置函数对数据进行分析,Spark SQL API不同的是,DataFrame中的内置函数操作的结果是返回一个Column对象,而DataFrame天生就是"A d ...
- SparkSQL 内置函数的使用(JAVA与Scala版本)
SparkSQL 内置函数的使用(JAVA与Scala版本) agg的使用(根据时间,去重id相同,统计相同时间内的id个数) Scala版本! package com.bynear.Scalaimp ...
- Spark内置图像数据源初探
概述 在Apache Spark 2.4中引入了一个新的内置数据源, 图像数据源.用户可以通过DataFrame API加载指定目录的中图像文件,生成一个DataFrame对象.通过该DataFram ...
- [译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数
[译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数 本文翻译自databricks的介绍spark2.4新特性的blog,英文原文参考原文链接 Apache Spark2.4总共支 ...
- HLSL内置函数一览
本文版权归 博客园 七星重剑 所有,如有转载,请按如下方式于显示位置标明原创作者及出处,以示尊重!! 作者:七星重剑 原文:每天30分钟看Shader--(1)HLSL固有函数 [Intrinsic ...
最新文章
- 一起学spring--spring事件机制--监听器
- NFS 网络文件系统测试笔记
- wdatepicker设置时间范围_Mac新手必看,这些设置可以让你的Mac更好用!
- VS2010安装HTML5插件
- hdu 5155(DP+排列组合)
- java简单计算_java简单计算器
- xilinx IP核技术资料
- jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】
- 栈空间_Linux中的进程栈和线程栈
- python基础技巧总结(三)
- 安卓学习笔记04:安卓平台架构
- LVCOLUMN和LVITEM结构体解析
- python __builtins__ copyright类 (14)
- poj2031(prim)
- BC26常用术语和缩略词
- 设计模式 -- Facade
- 个人博客成长分析(一)
- Python编程题(二)
- 泰勒公式(泰勒展开式,泰勒中值定理)使用基本技巧
- 国内投资者投资港股的四种方法和港股必知25件事
热门文章
- 7-6 判断题 (15分)
- 老板,我们的网站又挂了——漫谈 DDoS 攻击
- MFC下调用yolo_cpp_dll.dll
- Bloom Filter(布隆过滤器)
- Race_Condition实验
- 理解和使用Promise.all和Promise.race
- 程序员如何缓解压力,保持心理健康(转)
- 腾讯企业邮箱登录入口在哪?知名企业邮箱品牌登录方法大全!
- sghdg jskadhs khad jlad jlajd
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项