利用scala和RDD统计每个汉字出现的次数
时间: 2023-11-26 14:03:21 浏览: 83
以下是一个示例代码,假设我们有一个文本文件"input.txt",里面包含中文文本。
```scala
import org.apache.spark.{SparkConf, SparkContext}
object CharacterCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("CharacterCount").setMaster("local[*]")
val sc = new SparkContext(conf)
// 读入文本文件,每行转化为一个字符串
val lines = sc.textFile("input.txt")
// 将每个字符串拆分为单个字符
val characters = lines.flatMap(line => line.split(""))
// 过滤掉非中文字符
val chineseCharacters = characters.filter(isChineseCharacter)
// 将每个中文字符映射为一个键值对,值为1
val pairs = chineseCharacters.map(c => (c, 1))
// 按照键(中文字符)分组,将对应的值相加
val counts = pairs.reduceByKey(_ + _)
// 输出结果
counts.foreach(println)
sc.stop()
}
// 判断一个字符是否为中文字符
def isChineseCharacter(c: String): Boolean = {
val p = "^[\\u4E00-\\u9FA5]+$".r
p.findFirstMatchIn(c).isDefined
}
}
```
首先,我们读入文本文件并将每行转化为一个字符串。然后,我们将每个字符串拆分为单个字符,并过滤掉非中文字符。接下来,我们将每个中文字符映射为一个键值对,值为1。最后,我们按照键(中文字符)分组,将对应的值相加,得到每个中文字符出现的次数。最后,我们输出结果。
在这个示例中,我们使用了Scala编程语言和Spark RDD API来进行中文字符计数。我们首先使用flatMap()函数将每个字符串拆分为单个字符,然后使用filter()函数过滤掉非中文字符。接着,我们使用map()函数将每个中文字符映射为一个键值对。最后,我们使用reduceByKey()函数将相同键的值相加,得到每个中文字符出现的次数。
阅读全文