scala语言实现单词计数
时间: 2023-10-10 17:12:01 浏览: 74
以下是使用Scala实现单词计数的示例代码:
```scala
import scala.io.Source
object WordCount {
def main(args: Array[String]) {
if (args.length < 1) {
println("Usage: WordCount <file>")
System.exit(1)
}
val filename = args(0)
var count = 0
for (line <- Source.fromFile(filename).getLines()) {
count += line.split("\\W+").filter(!_.isEmpty).length
}
println(s"Total number of words: $count")
}
}
```
这个程序接受一个文件名作为命令行参数,并计算文件中单词的总数。它使用Scala的Source对象从文件中读取行,然后使用正则表达式将每行分割成单词,并过滤掉空字符串。最后,使用累加器计算单词数量并输出结果。
相关问题
使用Scala语言完成wordcount(单词计数)例子的编码及测试
下面是使用Scala语言完成wordcount例子的编码及测试的示例代码:
```scala
object WordCount {
def main(args: Array[String]): Unit = {
val input = "Hello world, I am learning Scala. Scala is a powerful language."
val words = input.toLowerCase().replaceAll("[^a-z ]", "").split("\\s+")
val wordCount = words.groupBy(identity).mapValues(_.length)
println(wordCount)
}
}
```
这个例子中,我们首先定义了一个字符串`input`,表示要进行单词计数的文本。接着,我们使用`toLowerCase()`方法将文本转换为小写,并使用`replaceAll()`方法将非字母和空格的字符替换为空格。最后,我们使用`split("\\s+")`方法将文本按照空格分割成单词,并使用`groupBy(identity)`方法和`mapValues(_.length)`方法完成单词计数。最终,我们将单词计数结果打印出来。
为了测试这个例子,我们可以直接运行`WordCount`对象的`main`方法,输出结果如下:
```
Map(language -> 1, hello -> 1, i -> 1, am -> 1, world -> 1, powerful -> 1, learning -> 1, a -> 1, is -> 2, scala -> 2)
```
这个结果表示,在输入文本中,单词`language`、`hello`、`i`、`am`、`world`、`powerful`、`learning`、`a`、`is`、`scala`分别出现了1或2次,完成了单词计数的任务。
spark streaming消费kafka数据进行词频统计,用scala语言
好的,以下是一个简单的示例代码,假设我们要消费名为“test”的Kafka主题,并对其中的单词进行词频统计:
```scala
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.kafka._
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.SparkConf
object WordCount {
def main(args: Array[String]): Unit = {
// 创建 SparkConf 对象
val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
// 创建 StreamingContext 对象
val ssc = new StreamingContext(conf, Seconds(5))
// 设置 Kafka 相关参数
val kafkaParams = Map[String, Object](
"bootstrap.servers" -> "localhost:9092",
"key.deserializer" -> classOf[StringDeserializer],
"value.deserializer" -> classOf[StringDeserializer],
"group.id" -> "test-group",
"auto.offset.reset" -> "latest",
"enable.auto.commit" -> (false: java.lang.Boolean)
)
// 创建一个 Kafka DStream
val kafkaStream = KafkaUtils.createDirectStream[String, String](
ssc,
LocationStrategies.PreferConsistent,
ConsumerStrategies.Subscribe[String, String](Array("test"), kafkaParams)
)
// 从 Kafka DStream 中提取单词
val words = kafkaStream.flatMap(record => record.value().split(" "))
// 对单词进行计数
val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _)
// 输出计数结果
wordCounts.print()
// 启动 Spark Streaming
ssc.start()
ssc.awaitTermination()
}
}
```
上述代码中,我们首先创建了一个 `SparkConf` 对象,并设置了应用程序名为“WordCount”,使用本地模式运行。然后创建了一个 `StreamingContext` 对象,每隔 5 秒钟将接收到的数据进行批处理。
接下来,我们设置了 Kafka 相关参数,包括 Broker 地址、键值对反序列化器、消费者组 ID 等。然后使用 `KafkaUtils.createDirectStream` 方法创建了一个 Kafka DStream。在这个 DStream 上,我们使用 `flatMap` 方法将每个消息的值按空格拆分成单词,并使用 `map` 和 `reduceByKey` 方法对单词进行计数。最后,我们调用 `print` 方法输出计数结果。
最后,我们启动 Spark Streaming 并等待计算完成。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)