计算Spark中数据框中列的值的频率

时间:2018-04-06 17:19:44

标签: apache-spark dataframe apache-spark-sql

我有一个带有以下架构的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)

1 个答案:

答案 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]           |
+----+--------------------------------------------+

希望这有帮助!