数据挖掘篇【 concat函数 和 concat_ws函数 】

本文介绍了SparkSQL中的矩阵概念,以及concat和concat_ws函数在连接DataFrame列值时的用法。重点讲解了这两个函数在处理NULL值上的区别,concat遇到NULL会返回NULL,而concat_ws则会忽略NULL并继续连接其他非NULL值。
摘要由CSDN通过智能技术生成

目录

矩阵

concat函数

concat_ws函数 

concat 和 concat_ws 的区别


矩阵

矩阵是一个二维数组,通常由一系列行和列组成。在数学、物理、工程和计算机科学等领域中,矩阵被广泛用于表示和处理数据。在数据处理和分析中,矩阵经常用于表示表格数据,其中行通常表示观测值(如用户、样本等),列表示特征或变量(如用户属性、商品ID等)。

在Spark SQL中,DataFrame可以被视为一个二维数组,其中每行代表一个记录,每列代表一个字段。例如,一个包含用户购买记录的DataFrame,每行代表一个用户的购买信息,列可能包括user_id和各个sku_id的购买情况(经过one-hot编码后)。这样的DataFrame在内部可以视为一个二维数组的结构,尽管在Spark中我们不会直接操作这个二维数组结构,而是通过DataFrame API来进行数据处理和分析。

举例:

[  
  [1, 2, 3],  
  [4, 5, 6],  
  [7, 8, 9]  
]

concat函数

concat($"user_id", lit(":"), $"sku_id") 这个表达式的作用是将user_id列的值、字符串":"(由lit(":")生成)和sku_id列的值连接在一起。

这里是每个部分的解释:

  • $"user_id" 和 $"sku_id":这些是DataFrame中列的名称。$符号是Spark SQL中用于引用列的特殊符号。
  • lit(":")lit是一个函数,用于将常量值(在这里是字符串":")作为列表达式传递。这允许你将常量值与其他列或表达式连接起来。
  • concat:这个函数接受多个列或表达式作为参数,并将它们的结果连接成一个字符串。

因此,如果user_id列的值是123sku_id列的值是456,那么concat($"user_id", lit(":"), $"sku_id")的结果将是字符串"123:456"

concat_ws函数 

CONCAT_WS 函数也是用于连接两个或多个字符串,但它允许你指定一个分隔符,这个分隔符会被插入到连接的字符串之间。CONCAT_WS中的“WS”代表“with separator”,即带分隔符的连接。

concat 和 concat_ws 的区别

处理NULL值的方式

  • 在 CONCAT 函数中,如果任何参数为NULL,整个函数将返回NULL。这是因为 CONCAT 函数在遇到NULL时不会进行任何连接操作。
  • 在 CONCAT_WS 函数中,如果分隔符为NULL,则函数会返回NULL。但如果要连接的字符串中包含NULL值,这些NULL值会被忽略,而不会导致整个函数返回NULL。这意味着即使某些字符串参数是NULL,你仍然可以得到一个连接了其他非NULL字符串的结果。

举个例子,假设我们有两个字符串变量 str1 和 str2,以及一个分隔符 sep。如果 str1 是 "Hello",str2 是 NULL,sep 是 ", ":

  • 使用 CONCAT(str1, sep, str2) 会返回 NULL,因为 str2 是NULL。
  • 使用 CONCAT_WS(sep, str1, str2) 会返回 "Hello",因为 CONCAT_WS 会忽略NULL值,并仅连接非NULL的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值