欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spark-Sql一行变多行explode使用

程序员文章站 2024-03-12 17:39:02
...

原数据如下:

+--------------+------------+----------+
|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就是我们需要数据,可以做下面统计了。

相关标签: Spark explode