Spark-Sql一行变多行explode使用

通过对原始出行搜索数据进行处理,将城市间搜索记录按交通方式细分,增加了TT(火火)、TF(飞机火车)等交通类型字段,便于进一步分析不同出行方式的搜索偏好。

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

原数据如下:

+--------------+------------+----------+
|from_city_name|to_city_name|search_num|
+--------------+------------+----------+
|           无锡市|         漯河市|         3|
|           南部县|        库尔勒市|         3|
|          石家庄市|         开封市|         2|
|           深圳市|         成都市|        55|
|           贵阳市|         丽水市|         7|
|           东营市|         淄博市|         1|
|           南充市|         东莞市|        23|
|           苏州市|         开封市|         4|
|           苍溪县|         阆中市|         2|
|           北京市|         开封市|        10|
|           重庆市|         重庆市|       347|
|           无锡市|         株洲市|         3|
|           东莞市|         临高县|         2|
|           常宁市|         清远市|         1|
|           广州市|         郁南县|        39|
|           中山市|         醴陵市|         1|
|           南宁市|         田东县|         7|
|           广州市|         惠州市|        20|
|           柳州市|         南宁市|         1|
|           合肥市|         南昌市|         9|
+--------------+------------+----------+
only showing top 20 rows

现在有这样需求
无锡市, 漯河市,3一行拆成五行每行多一个字段TT,TF,TB,FT,BT(T代表火车,F代表飞机,B代表汽车,
TT代表火火,FT代表飞机火车拼接线路)
代码如下

    	Dataset<Row> tableData=offlineTable(spark).groupBy("from_city_name","to_city_name").agg(count("*").as("search_num"));
        tableData.show();
        Dataset<Row> result= tableData.withColumn("traffic_types",lit("TT,TF,TB,FT,BT"));
        Dataset<Row> finalResult= result.withColumn("traffic_type",explode(split(col("traffic_types"),",")));
        finalResult.show();

结果如下:

+--------------+------------+----------+--------------+------------+
|from_city_name|to_city_name|search_num| traffic_types|traffic_type|
+--------------+------------+----------+--------------+------------+
|           无锡市|         漯河市|         3|TT,TF,TB,FT,BT|          TT|
|           无锡市|         漯河市|         3|TT,TF,TB,FT,BT|          TF|
|           无锡市|         漯河市|         3|TT,TF,TB,FT,BT|          TB|
|           无锡市|         漯河市|         3|TT,TF,TB,FT,BT|          FT|
|           无锡市|         漯河市|         3|TT,TF,TB,FT,BT|          BT|
|           南部县|        库尔勒市|         3|TT,TF,TB,FT,BT|          TT|
|           南部县|        库尔勒市|         3|TT,TF,TB,FT,BT|          TF|
|           南部县|        库尔勒市|         3|TT,TF,TB,FT,BT|          TB|
|           南部县|        库尔勒市|         3|TT,TF,TB,FT,BT|          FT|
|           南部县|        库尔勒市|         3|TT,TF,TB,FT,BT|          BT|
|          石家庄市|         开封市|         2|TT,TF,TB,FT,BT|          TT|
|          石家庄市|         开封市|         2|TT,TF,TB,FT,BT|          TF|
|          石家庄市|         开封市|         2|TT,TF,TB,FT,BT|          TB|
|          石家庄市|         开封市|         2|TT,TF,TB,FT,BT|          FT|
|          石家庄市|         开封市|         2|TT,TF,TB,FT,BT|          BT|
|           深圳市|         成都市|        55|TT,TF,TB,FT,BT|          TT|
|           深圳市|         成都市|        55|TT,TF,TB,FT,BT|          TF|
|           深圳市|         成都市|        55|TT,TF,TB,FT,BT|          TB|
|           深圳市|         成都市|        55|TT,TF,TB,FT,BT|          FT|
|           深圳市|         成都市|        55|TT,TF,TB,FT,BT|          BT|
+--------------+------------+----------+--------------+------------+

删除traffic_types就是我们需要数据,可以做下面统计了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值