一、说明

  • 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. 基于场效应管2N3819制作非接触电压检测 - 购买到假货了
  2. 密码学信息理论基础2
  3. linux loop device
  4. java junit 怎么写_使用JUnit测试java代码
  5. caioj1495: [视频]基于连通性状态压缩的动态规划问题:Formula 2
  6. 中小型企业网络构建(思科)
  7. win10离线安装 .NetFramework3.5
  8. docker镜像指定安装源_详解如何修改docker pull镜像源
  9. SpringBoot 接口数据加解密
  10. outlook邮箱邮件大小限制_outlook 附件大小限制
  11. Python数据清洗:提取爬虫文本中的电话号码
  12. unity射线检测高速飞行的子弹是否打到敌人
  13. 明日服务器中断,明日之后服务器断开连接怎么办
  14. Witt向量简介 §1.1:环上赋值基础
  15. IDEA 中如何将项目打成war包
  16. S7-1200 PLC的内部存储区和掉电保持功能说明
  17. 【亚马逊运营】优惠券是怎么扣费的你都知道吗?
  18. 项目需求分析定义的灵魂拷问
  19. win7c盘空间越来越小_C盘空间越来越小原因
  20. STM32中断相关概念阐述

热门文章

  1. 500G 史上最全的JAVA全套视频教程网盘
  2. AWS使用(一)——申请付费版亚马逊云服务器的流程
  3. 和程序员打官司的第一季结束,第二季即将开始
  4. RedisDesktopManager源码编译windows版(基于2022.1版本)
  5. 斯须改变如苍狗——一张图的随想
  6. 大环配体DOTA修饰Fe3O4磁性纳米颗粒定制-瑞禧小编
  7. 壳聚苯乙烯/单分散核-壳结构/中空/介孔二氧化硅微球的研究
  8. 互联网日报 | 4月27日 星期二 | 美团回应被立案调查;滴滴开通老年人打车400热线;百度App月活跃用户数达5.58亿
  9. python抽取timedelta中的天数、小时、分钟、秒钟信息
  10. 四氧化三铁负载石墨烯复合物/氧化石墨烯-四氧化三铁纳米颗粒/稻壳基炭负载纳米四氧化三铁颗粒