一、说明

  • 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相关推荐

  1. spark sql uv_内置函数_SparkSQL学习 - 编程那点事

    Spark 1.5.x版本引入的内置函数在Spark 1.5.x版本,增加了一系列内置函数到DataFrame API中,并且实现了code-generation的优化.与普通的函数不同,DataFr ...

  2. Spark SQL 内置函数(五)Aggregate Functions(基于 Spark 3.2.0)

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  3. Spark15:Spark SQL:DataFrame常见算子操作、DataFrame的sql操作、RDD转换为DataFrame、load和save操作、SaveMode、内置函数

    前面我们学习了Spark中的Spark core,离线数据计算,下面我们来学习一下Spark中的Spark SQL. 一.Spark SQL Spark SQL和我们之前讲Hive的时候说的hive ...

  4. Spark SQL 内置函数(一)Array Functions(基于 Spark 3.2.0)

    前言 本文隶属于专栏<1000个问题搞定大数据技术体系>,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见1000个问题搞定大数据技 ...

  5. SparkSQL内置函数

    使用Spark SQL中的内置函数对数据进行分析,Spark SQL API不同的是,DataFrame中的内置函数操作的结果是返回一个Column对象,而DataFrame天生就是"A d ...

  6. SparkSQL 内置函数的使用(JAVA与Scala版本)

    SparkSQL 内置函数的使用(JAVA与Scala版本) agg的使用(根据时间,去重id相同,统计相同时间内的id个数) Scala版本! package com.bynear.Scalaimp ...

  7. Spark内置图像数据源初探

    概述 在Apache Spark 2.4中引入了一个新的内置数据源, 图像数据源.用户可以通过DataFrame API加载指定目录的中图像文件,生成一个DataFrame对象.通过该DataFram ...

  8. [译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数

    [译]介绍Spark2.4的用于处理复杂数据类型的新内置函数与高阶函数 本文翻译自databricks的介绍spark2.4新特性的blog,英文原文参考原文链接 Apache Spark2.4总共支 ...

  9. HLSL内置函数一览

    本文版权归 博客园 七星重剑 所有,如有转载,请按如下方式于显示位置标明原创作者及出处,以示尊重!! 作者:七星重剑 原文:每天30分钟看Shader--(1)HLSL固有函数 [Intrinsic ...

最新文章

  1. 一起学spring--spring事件机制--监听器
  2. NFS 网络文件系统测试笔记
  3. wdatepicker设置时间范围_Mac新手必看,这些设置可以让你的Mac更好用!
  4. VS2010安装HTML5插件
  5. hdu 5155(DP+排列组合)
  6. java简单计算_java简单计算器
  7. xilinx IP核技术资料
  8. jzoj4485-[GDOI 2016 Day1]第一题 中学生数学题【数学】
  9. 栈空间_Linux中的进程栈和线程栈
  10. python基础技巧总结(三)
  11. 安卓学习笔记04:安卓平台架构
  12. LVCOLUMN和LVITEM结构体解析
  13. python __builtins__ copyright类 (14)
  14. poj2031(prim)
  15. BC26常用术语和缩略词
  16. 设计模式 -- Facade
  17. 个人博客成长分析(一)
  18. Python编程题(二)
  19. 泰勒公式(泰勒展开式,泰勒中值定理)使用基本技巧
  20. 国内投资者投资港股的四种方法和港股必知25件事

热门文章

  1. 7-6 判断题 (15分)
  2. 老板,我们的网站又挂了——漫谈 DDoS 攻击
  3. MFC下调用yolo_cpp_dll.dll
  4. Bloom Filter(布隆过滤器)
  5. Race_Condition实验
  6. 理解和使用Promise.all和Promise.race
  7. 程序员如何缓解压力,保持心理健康(转)
  8. 腾讯企业邮箱登录入口在哪?知名企业邮箱品牌登录方法大全!
  9. sghdg jskadhs khad jlad jlajd
  10. SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项