You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中RDD内容控制台输出及文本文件保存问题

修正后的Scala代码及解决方案

先聊聊你代码里的两个小问题:

  1. line.split(".") 里的.是正则表达式的通配符(匹配任意字符),根本不是你想的按点分割,得改成\\.才能匹配实际的点符号;
  2. splitRDD.foreach(println) 打印的是String数组的对象引用(比如[Ljava.lang.String;@xxxx),不是数组里的实际内容,得处理数组才能输出值。

满足需求的完整代码

// 替换成你的实际输入文件路径
val file = "your_input_file_path"
val emailMsg = sc.textFile(file)
// 按点分割,同时过滤掉空字符串(处理可能的空行或首尾点)
val splitRDD = emailMsg.map(line => line.split("\\.").filter(_.nonEmpty))

// 需求1:输出内容到控制台(两种可选方式)
// 方式A:每个分割后的元素单独占一行打印
splitRDD.foreach(arr => arr.foreach(println))
// 方式B:把一行的分割结果拼成字符串,整行打印(比如用逗号分隔)
// splitRDD.foreach(arr => println(arr.mkString(", ")))

// 需求2:保存到文本文件
// 先把数组转成可读字符串,再合并为单文件(不需要单文件可去掉coalesce(1))
splitRDD.map(_.mkString(", ")).coalesce(1).saveAsTextFile("newfile")

关键细节说明

  • 分割逻辑修正:正则里的.必须转义,所以用\\.,如果你的分割符不是点,替换成对应正则即可;
  • 控制台输出选择:如果想逐个元素打印选方式A,想把一行的分割结果放一起看选方式B;
  • 文件保存注意:必须把数组转成字符串(比如mkString),不然保存的文件里全是数组对象的垃圾字符串,coalesce(1)是为了生成单个输出文件,不需要的话直接删掉,Spark会按分区生成多个文件。

内容的提问来源于stack exchange,提问作者Steve McAffer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:44:22