原数据如下:
+--------------+------------+----------+
|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 tableData=offlineTable(spark).groupBy("from_city_name","to_city_name").agg(count("*").as("search_num"));
tableData.show();
Dataset result= tableData.withColumn("traffic_types",lit("TT,TF,TB,FT,BT"));
Dataset 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就是我们需要数据,可以做下面统计了。