关于Spark的Dateset的操作:拼接字符串,创建UDF匿名内部类并使用,functions方法中数组字段与对象字段

本文介绍了Spark中Dateset的三种操作:1)如何使用functions.concat拼接字符串创建新列;2)创建UDF匿名内部类,并通过call方法处理列值;3)处理包含数组或对象字段的情况,如struct和array函数的应用。通过这些方法,可以灵活地对数据集进行复杂的数据处理和转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Spark的Dateset的操作

1.拼接字符串

当你需要进行字符串和列的值进行拼接组成新的列时:
functions.concat(functions.lit("id="), user.col("id"),
functions.lit("name="), user.col("name")).as("student"))

代码解析:functions.concat 是拼接方法,functions.lit(“id=”) 需要拼接的字符串,
goods.col(“id”) user是一个Dateset< Row > ,id是user的一列的列明,以此类推,
as(“student”))是组合后的字符串作为值的名称。

2.创建UDF匿名内部类并使用

当你需要对一列或者多列值进行组合操作并且需要返回值时
UDF2 hashKey = new UDF2<String, String, String>() {

            public String call(final String arguments, final String arguments2) throws Exception {
                String spliceString = arguments + arguments2;

                return DigestUtils.md5Hex(spliceString);
            }
        };
         spark.udf().register("hashKey", hashKey, DataTypes.StringType);

代码解析:UDF2 是代表有两个参数的接口,虽然后面有三个String我们一般只会输入其中两个,由于需要创建实例,必须实现它的抽象,call,在方法中可以对传入参数做处理并进行返回,DigestUtils.md5Hex(spliceString),我这里是对拼接的字符串做了MD5加密,spark.udf().register(“hashKey”, hashKey, DataTypes.StringType),使用这种UDF的方法必须要注册,否则无法使用。

functions方法中数组字段与对象字段

当你的某个字段的内容是数组或者对象,或者相互组合的情况
functions.struct(user.col(id),user.col(name));
functions.array(user.col(id),user.col(name));
functions.struct(functions.array(user.col(id),user.col(name)),
functions.array(user.col(id),user.col(name)));
functions.array(functions.struct(user.col(id),user.col(name)),
functions.struct(user.col(id),user.col(name)));

代码解析:
functions.struct(user.col(id),user.col(name));显示结果:{ }
functions.array(user.col(id),user.col(name));显示结果:[ ]
functions.struct(functions.array(user.col(id),user.col(name)),
functions.array(user.col(id),user.col(name)));
显示结果:{[ ],[ ]}
functions.array(functions.struct(user.col(id),user.col(name)),
functions.struct(user.col(id),user.col(name)));
显示结果:[{ },{ }]

参考Spark KPI:http://spark.apachecn.org/#/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值