本文介绍了Spark SQL中的一系列字符串处理函数,包括ascii、base64、unbase64、concat、concat_ws、decode、encode、format_number、format_string、initcap、lower、upper等。这些函数涵盖了字符串的编码解码、格式化、大小写转换、查找定位、填充修剪、正则表达式操作等多个方面,是Spark SQL进行数据处理时常用的功能。
摘要由CSDN通过智能技术生成
unbase64(e: Column): base64解码
concat(exprs: Column*):连接多列字符串
concat_ws(sep: String, exprs: Column*):使用sep作为分隔符连接多列字符串
decode(value: Column, charset: String): 解码
encode(value: Column, charset: String): 转码,charset支持'US-ASCII', 'ISO-8859-1', 'UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'。
format_number(x: Column, d: Int):格式化'#,###,###.##'形式的字符串
format_string(format: String, arguments: Column*): 将arguments按format格式化,格式为printf-style。
initcap(e: Column): 单词首字母大写
lower(e: Column): 转小写
upper(e: Column): 转大写
instr(str: Column, substring: String): substring在str中第一次出现的位置
length(e: Column): 字符串长度
levenshtein(l: Column, r: Column): 计算两个字符串之间的编辑距离(Levenshtein distance)
locate(substr: String, str: Column): sub
①返回数字3.8378四舍五入后保留3位有效数字的结果,返回数字3.8378截断后保留3位有效数字的结果。
首先这题我们要用到My
SQL
中的常用的数学
函数
rount(x,y)和 truncate(x,y)个
函数
我就不过多解释了哈,前面的博客有提到
MariaDB [(none)]> select round(3.8378,3),
-> truncate(3.8378,3);
collect_set(nickname)[0] AS nickname,
collect_set(nat_code)[0] AS nat_code,
collect_set(reg_brand)[0] AS reg_brand,
collect_set(r...
用
Spark
SQL
读取Hive中的数据后,将DataFrame转化成JavaRDD,想要foreach打印里面的内容,或者collect一下,都会报错:
说是某各类没有序列化,但是我找来找去没有在闭包内部使用外部类,连collect一下也报错。
上网查说是版本的bug,这是
Spark
2.2.0的bug,后面2.2.1以后就修复了,我就换了2.2.1的版本,就直接可以跑了
熟悉
Spark
编程的朋友们应该知道,
Spark
中有
Sql
Context与HiveContext,其中
Sql
Context默认是
大小写
敏感,如果DataFrame中有字段相同只是
大小写
不同,在使用字段的时候不会引发歧义;HiveContext提供了更多的Hive预置
函数
,可以更高效的进行数据开发,但是默认为大小不敏感,也就是说当数据中存在类似name和NAME两个字段时,这个时候如果编写代码:
spark
sql
dataset 写入表的时候,我写的是一个用ymd分区的表,我想设置输出格式format(“hive”),然后报错了
ds.write().partitionBy(partitionsStr)
.option("path", hdfspath)
.mode(SaveMode.Append).format("hive")
.saveAsT
import org.apache.
spark
.
Spark
Context
import org.apache.
spark
.
sql
.expressions.UserDefinedFunction
import org.apache.
spark
.
sql
.{DataFrame, Dataset,
Spark
Session}
* @param
def main(args: Array[String]): Unit = {
val conf = new
Spark
Conf().setAppName("MyScalaWordCount");
//创建一个
Spark
Context对象
val sc = new
Spark
Context(conf)
//读取文件及分割单词
val res = sc.textFile("/home/luohuan/in.
public static void main(String[] args) {
ThreadLocal<
Spark
Session> sessionPool = new ThreadLocal<>();
// 先判断会话池中是否有session,如果有就直接用,没有再创建
if (sessionPool.get() != null) {
2的6次方=64,即Base64的Base64单元有6位;
一个字符最多是3个字节,即24位。UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节。
所以三个字节,用4个Base64单元来表示;Base64编码会把3字节的二进制数据编码为4字节的...