Scala 词频统计WordCount实例

1. 实现一个词频统计的demo。

data目录是工程下与src同级的目录。

import java.io.File
import scala.io.Source

object WordCount {
  def main(args: Array[String]): Unit = {
    val dir_file = new File("data")
    val file_list = dir_file.listFiles().toList
    for (f <- file_list) println(f)
    val words_map = scala.collection.mutable.Map[String,Int]()
    file_list.foreach(
      Source.fromFile(_).getLines()     // 处理每一个文件
        .foreach(_.split(" ")    // 处理每一行
        .foreach(word => {
          if(words_map.contains(word)){
            words_map(word) += 1
          } else {
            words_map += (word -> 1)
          }
        }))
    )

    for(kv <- words_map) println(kv._1 + ": " + kv._2)
  }
}

2. 使用rdd进行优化

package com.zz.spark

import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{Dataset, SparkSession}

object WordCount {
  def main(args: Array[String]): Unit = {
 
<think>好的,我现在需要帮助用户找到Spark本地模式下的词频统计示例代码。首先,我应该回忆一下用户提供的引用内容,看看有没有相关的代码示例或者配置说明。 用户给出的引用中有几个相关的部分。引用3提到在IntelliJ IDEA中使用Scala编写Spark的WordCount程序并提交到集群,但用户需要的是本地运行的例子。引用4和5讨论了本地模式的配置,特别是设置master为local,这很重要。引用5还提到了如何在本地运行,比如使用local[*]以及textFile方法的路径问题。 接下来,我需要确认用户需要的是Scala还是Python的代码。因为大部分引用中的代码示例是Scala的,比如引用2中的DataFrame操作,而用户之前的问题可能更偏向于Scala,但也不排除Python的可能性。不过,考虑到Spark原生是用Scala编写的,可能优先提供Scala的示例。 然后,我需要确保代码正确配置了SparkConf,设置master为local模式,比如local[*],这样可以在本地运行。同时,输入文件的路径应该是本地路径,比如"data.txt",而不是HDFS路径。输出目录也需要是本地目录,并且要注意在运行前删除已存在的输出目录,避免错误。 另外,用户可能需要代码的详细解释,比如每一步的作用,如何设置配置,如何读取文件,进行分词和统计,以及保存结果。还需要提醒用户关于依赖管理和运行方式,比如使用spark-submit或者在IDE中运行,并确保Spark的相关依赖已经正确添加。 可能还需要参考引用5中关于SparkConf的setMaster方法,确认在本地模式下的正确配置,以及textFile方法读取本地文件的路径写法。同时,引用2中的示例虽然涉及流处理,但展示了如何创建SparkSession,这可能对结构化数据处理有帮助,不过WordCount通常使用RDD更直接。 最后,确保代码示例简洁,符合用户需求,并且包含必要的注释,方便用户理解。同时,生成相关问题,帮助用户进一步学习,比如性能优化、与其他模式的区别、调试技巧等。</think>以下是一个基于Spark本地模式(local)Scala词频统计完整示例代码,包含详细配置说明: ```scala import org.apache.spark.{SparkConf, SparkContext} object LocalWordCount { def main(args: Array[String]): Unit = { // 创建Spark配置(本地模式) val conf = new SparkConf() .setAppName("LocalWordCount") .setMaster("local[*]") // 使用所有可用核心 // 创建Spark上下文 val sc = new SparkContext(conf) try { // 读取本地文件(路径需替换为实际路径) val textFile = sc.textFile("file:///path/to/input.txt") // 词频统计处理流程 val wordCounts = textFile .flatMap(line => line.split("\\s+")) // 按空格分词 .map(word => (word.toLowerCase, 1)) // 转换为小写并生成键值对 .reduceByKey(_ + _) // 聚合统计 // 输出结果到本地文件系统(需确保目录不存在) wordCounts.saveAsTextFile("file:///path/to/output") // 控制台打印结果(调试用) wordCounts.collect().foreach(println) } finally { sc.stop() // 关闭Spark上下文 } } } ``` ### 关键配置说明: 1. **本地模式设置**:`setMaster("local[*]")`指定使用本地模式运行,星号表示使用所有可用CPU核心[^5] 2. **文件路径格式**:本地文件路径需添加`file://`前缀,例如`file:///home/user/data.txt`[^5] 3. **资源限制**:可通过`local[N]`指定使用的线程数,如`local[4]`使用4个线程[^4] ### 运行准备: 1. 确保JDK 8+环境变量配置正确 2. 添加Spark依赖(Maven配置示例): ```xml <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.3.0</version> </dependency> ``` ### 执行方式: 1. 在IDE中直接运行(需确保本地模式配置) 2. 使用spark-submit提交(本地模式): ```bash spark-submit --class LocalWordCount --master local[*] your-jar.jar ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值