scala-WordCount 简单项目练习

本文详细介绍了使用 Scala 编程语言实现 WordCount 的过程。通过 List 的 flatMap、map 和 groupBy 方法对文本进行单词计数,展示了如何利用元组进行数据处理,以及如何对结果进行排序和聚合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.doit.scala.day02
import scala.collection.immutable

object WordCount {
  def main(args: Array[String]): Unit = {
    val lines: immutable.Seq[String] = List("spark hadoop flink spark", "hadoop flink spark hadoop", "spark hadoop flink spark")
    val list: immutable.Seq[(String, Int)]  = lines.flatMap(_.split(" ")).map((_, 1)).groupBy(_._1).map(t => (t._1, t._2.length)).toList.sortBy(-_._2)
   // println(list)
    //先对List扁平化 flat 切分 split
    val strings = lines.flatMap(_.split(" "))
    //将每一个单词放入元组(x,1) 中
    val wordAndOne: immutable.Seq[(String, Int)] = strings.map((_, 1))
    //将已经装进元组的List数据按照(x,1)的分组
    val grouped: Map[String, immutable.Seq[(String, Int)]] = wordAndOne.groupBy(_._1)
    //聚合
    val reduce: Map[String, Int] = grouped.map(t => (t._1, t._2.size))
    //转成List,排序
    val list1 = reduce.toList
    //降序排列
    val tuples: immutable.Seq[(String, Int)] = list1.sortBy(-_._2)
    //先正序排列再反转
    val tuples2: immutable.Seq[(String, Int)] = list1.sortBy(_._2).reverse
    println(tuples) //List((spark,5), (hadoop,4), (flink,3))

  }
}

 

### Flink 客户端与 Scala 集成 #### 关于配置和使用实例 对于希望将 Apache Flink 和 Scala 结合使用的开发者来说,理解两者之间的集成至关重要。为了使 Flink 应用程序能够利用 Scala 的特性,需要确保环境已经正确设置。 安装并配置好 Java Development Kit (JDK),因为无论是 Flink 还是 Scala 编译器都需要 JDK 支持。接着应下载对应版本的 Flink 发行版,并解压到合适的位置。如果计划采用 Maven 构建工具来管理依赖关系,则应在项目的 `pom.xml` 文件中声明所需的 Flink 和 Scala 版本: ```xml <properties> <flink.version>1.15.0</flink.version> <scala.binary.version>2.12</scala.binary.version> </properties> <dependencies> <!-- Flink dependencies --> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-scala_${scala.binary.version}</artifactId> <version>${flink.version}</version> </dependency> </dependencies> ``` 编写简单WordCount 实例可以作为入门练习。下面是一个基于 Scala简单例子,展示了如何读取文本文件并对其中单词计数[^1]: ```scala import org.apache.flink.api.scala._ object WordCount { def main(args: Array[String]) { val env = ExecutionEnvironment.getExecutionEnvironment val text = env.readTextFile("/path/to/input/file") val counts = text.flatMap(_.toLowerCase.split("\\W+")) .filter(_.nonEmpty) .map((_, 1)) .groupBy(0) .sum(1) counts.writeAsCsv("/path/to/output/directory", "\n", " ") env.execute("Word Count Example") } } ``` 此代码片段定义了一个名为 `WordCount` 的对象及其主函数。该应用程序会加载输入数据源中的每一行字符串,将其转换为小写形式后按照非字母字符分割成多个词语;过滤掉空串并将每个词映射至键值对 `(word, 1)` 形式;最后按第一个字段分组求和得到最终的结果集,并输出到指定路径下的 CSV 文件当中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值