Spark对复杂结构的处理
结构体
创建结构体#
在字符串公式中就是一个”()“就表示一个结构体
//创建结构体
//方法1:
df.selectExpr("(Description, InvoiceNo) as complex", "*").show(2)
//方法2:
df.selectExpr("struct(Description, InvoiceNo) as complex", "*").show(2)
查询结构体中的信息使用'.'
数组
我们的数组通常是DataFrame的一个元素。
- split函数
对数组元素的访问://对Description的数据进行切分生成数组 df.select(split(col("Description"), " ").as("array")).show(2)
//对Description的数据进行切分生成数组 val arrayDF = df.select(split(col("Description"), " ").as("array")) arrayDF.show(20) arrayDF.selectExpr("array[0]").show(20)
下面是一些常用的函数:
- size(Array[])-查询数组的长度
- array_contains(Array[], 单词)-查询是否包含
- explode(重要)
将Array或者Map中形成一列。具体效果看运行的代码结果://对Description的数据进行切分生成数组 val arrayDF = df.select(split(col("Description"), " ").as("array"), col("*")) arrayDF.show(2) arrayDF.withColumn("splittedArray", explode(col("array"))) .select("Description", "splittedArray").show(8)
map结构
创建map#
//创建map
df.select(map(col("Description"), col("InvoiceNo")).as("map")).show(2)
可以使用key值对value进行查询,若key值不存在则返回null
key值查询#
//创建map
val mapDF = df.select(map(col("Description"), col("InvoiceNo")).as("map"))
mapDF.selectExpr("map['WHITE METAL LANTERN']").show(2)
将map的键值对转换成列#
//创建map
val mapDF = df.select(map(col("Description"), col("InvoiceNo")).as("map"))
//方法1:
mapDF.selectExpr("explode(map)").show(2)
//方法2:
mapDF.select(explode(col("map"))).show(2)
作者:ALINGMAOMAO
出处:https://www.cnblogs.com/ALINGMAOMAO/p/17118160.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探