我有一个带有以下架构的Spark数据框:
demo.addEventListener('keydown', (e) => {
switch(e.key) {
case '*':
console.log('asterisk');
break;
case 'Enter':
console.log('Enter');
break;
default:
console.log('something else');
}
});
由
等值组成<input id="demo">
在匹配列中计算单词频率的最佳方法是什么? O / P应该像:
root
|-- name: string (nullable = true)
|-- matches: string (nullable = false)
答案 0 :(得分:1)
您可以使用udf
计算频率
创建一个udf
作为
val countFreq = udf((value: String) =>
value.split(",").map(_.trim).groupBy(identity).mapValues(_.size)
)
使用udf
功能
withColumn
输出:
val resultDF = df1.withColumn("matches", countFreq($"matches"))
resultDF.show(false)
你得到的最终架构是地图
+----+--------------------------------------------+
|name|matches |
+----+--------------------------------------------+
|inf1|[inf2 -> 2, inf1 -> 2, inf3 -> 2] |
|inf2|[inf2 -> 2, inf1 -> 2, inf3 -> 2] |
|inf3|[inf1 -> 1, inf4 -> 1, inf3 -> 1] |
|inf4|[inf2 -> 2, inf1 -> 3, inf4 -> 1, inf3 -> 3]|
|inf5|[inf1 -> 1, inf4 -> 1, inf3 -> 1] |
+----+--------------------------------------------+
希望这有帮助!