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就是我们需要数据,可以做下面统计了。
上一篇: Java加解密技术系列之RSA详解
下一篇: 搬货物 比较有意思的一种解法
推荐阅读
-
Spark-Sql一行变多行explode使用
-
WPS中使用文本转换表格功能快速将两行及多行文字连接成一行
-
【JAVA】表格数据的存储(2)每一行使用javabean对象存储,多行使用放到map或者list中
-
Oracle中合并数据集(多行变一行)
-
Oracle中合并数据集(多行变一行)
-
SQL实现多行变一行
-
如何使用css实现文字一行居中,多行左对齐?_html/css_WEB-ITnose
-
如何使用css实现文字一行居中,多行左对齐?_html/css_WEB-ITnose
-
WPS中使用文本转换表格功能快速将两行及多行文字连接成一行
-
notepad怎么用逗号替换换行? notepad文本多行变一行的技巧