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

为何得到Set[Char]而非Set[String]?Spark RDD键值对问题

问题原因与解决方案

嘿,这个问题我之前也踩过坑!其实问题出在Scala里String类型的toSet方法上。

为什么会得到Set[Char]?

Scala中的String本质上是**字符序列(Seq[Char])**的子类,当你调用toSet方法时,它会遍历字符串里的每一个字符,把它们分别作为集合的元素。所以你代码里的x.split("\t")(2).toSet,当这个字符串是"m1"时,就会被拆分成Set('m', '1'),而不是你想要的包含整个字符串的Set("m1")。

怎么修正?

你需要做的不是调用字符串的toSet,而是直接把这个字符串包装成一个Set[String]。把代码里的x.split("\t")(2).toSet改成Set(x.split("\t")(2))就可以了。

修正后的完整代码:

val newRdd = textFile.map(x => (x.split("\t")(1), Set(x.split("\t")(2)))).reduceByKey(_++_)

这样处理后,输入"1 title1 m1"会被映射成("title1", Set("m1")),经过reduceByKey(_++_)合并后,就能得到你期望的(title1, Set(m1))结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:28:19