scala - Spark:如何根据 Scala 中的字符串模式进行分组?
问题描述
我有一个数据框:
[data :String, itemType:String, itemClass:String, itemGroup:String]
其中 itemType、itemClass 和 itemGroup 包含逗号分隔的字符串。我分解了它们并为每个值创建了一行。
df.withColumn("itemType", explode(split($"itemType", "[,]")))
.withColumn("itemGroup", explode(split($"itemGroup", "[,]")))
.withColumn("itemClass", explode(split($"itemClass", "[,]")))
我正在尝试按 itemType、itemGroup 和 itemClass 的值进行分组。
df.groupBy($"itemType".contains("item class ")).count()
但这只是给了我真实和空值,但没有按模式分组。有没有办法按最常见的模式分组但不完全匹配。
解决方案
您可以根据正则表达式以这种方式进行分组。您需要为您的数据编写自己的正则表达式,并且可以按如下方式分组。
这是对一些样本数据进行分组的一种方法。
假设您的数据框 IDdf
和数据如下所示。
分组前:df.show()
+----+----------+------------+-----------+
|data| itemType| itemGroup| itemClass|
+----+----------+------------+-----------+
| 1|type1_dgdf| group1_flkk|class1_gdfg|
| 1|type1_jhgj| group1_fgfd|class1_grtt|
| 1|type1_657g| group1_6gfh|class1_342e|
| 1| type1_qer| group2_wqw|class1_fgfv|
| 2|type2_seds| group2_wqw|class2_fiuy|
| 2| type2_65|group2_wuyuy|class2_232e|
| 2| type2_ffg| group2_wyty|class2_fere|
+----+----------+------------+-----------+
分组后:
+--------+---------+---------+-----+
|itemType|itemGroup|itemClass|count|
+--------+---------+---------+-----+
| type1| group2| class1| 1|
| type2| group2| class2| 3|
| type1| group1| class1| 3|
+--------+---------+---------+-----+
代码:
import org.apache.spark.sql.functions.regexp_extract
df.groupBy(
regexp_extract(df("itemType"), "(type\\d).*$", 1).alias("itemType"), // here pattern matches for starting with `type` and then any number using `\d` (\\d for windows).. same logic for others as well.
regexp_extract(df("itemGroup"), "(group\\d).*$", 1).alias("itemGroup"),
regexp_extract(df("itemClass"), "(class\\d).*$", 1).alias("itemClass"))
.count().show()
推荐阅读
- html - 如何将文本放在另一个div内的div底部
- c - 长 fprintf 循环期间的分段错误
- r - 是否可以覆盖 R plotly 条形图中标签的字体大小限制?
- datagrid - datagridcell 值发生变化但未发生更新
- ggplot2 - 如何绘制两个数据框的分组条形图?
- ansible - 在ansible playbook中省略参数的父级
- python - Python中的网络演化动画
- r - 如何使用 apply 函数来定位数组中的特定维度?
- azure - 操作返回了无效的状态代码“未找到”Xamarin 表单和 Azure CustomVision
- twilio - 如何使用 Flutter 制作 Web 应用并集成 twillo vedio 聊天 api?