马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在 Scala 中,size 和 length 都可用于获取集合的元素数量,但它们的适用场景和计划意图不同。在 Spark 的 mapValues 示例中使用 size 而非 length,重要与集合范例的底层实现有关:
以一下代码为例,表明
- // 数据转换
- val studentScoresRDD = linesRDD.map { line =>
- val fields = line.split(",")
- (fields(0), fields(2).toDouble)
- }.cache()
- // 任务1:计算总成绩
- val totalScores = studentScoresRDD.reduceByKey(_ + _)
- totalScores.saveAsTextFile(outputPath1)
- // 任务2:计算平均成绩
- val avgScores = studentScoresRDD.groupByKey()
- .mapValues(scores => scores.sum / scores.size)
- .cache()
- avgScores.saveAsTextFile(outputPath2)
复制代码 1. size vs. length 的核心区别
方法适用集合范例实现特点示例length固定长度的集合(如数组、列表)直接返回预存储的长度值,时间复杂度 O(1)Array(1,2,3).length → 3size任意集合(包括可变长度集合)大概需要遍历集合盘算,时间复杂度 O(n)Set(1,2,3).size → 3 2. 为什么 scores.size 是精确的?
在 Spark 的 groupByKey 后,scores 的范例是 Iterable[Double]:
- Iterable 是通用接口,不保证元素数量预先可知(如惰性集合、流数据)。
- Iterable 仅界说了 size 方法,未界说 length。
示例验证:
- val scores: Iterable[Double] = List(85.0, 90.0) // 实际类型取决于groupByKey的实现
- scores.size // ✅ 合法(所有Iterable都有size)
- // scores.length // ❌ 编译错误:length不是Iterable的方法
复制代码 3. 哪些集合用 length?
- 数组(Array):
- val arr = Array(1, 2, 3)
- arr.length // ✅ 推荐(O(1)复杂度)
- arr.size // ✅ 可用(但实际调用的是length)
复制代码 - 列表(List):
- val list = List(1, 2, 3)
- list.length // ✅ 推荐(O(1)复杂度)
- list.size // ✅ 可用(但实际调用的是length)
复制代码 4. 哪些集合用 size?
- Set、Map:
- val set = Set(1, 2, 3)
- set.size // ✅ 推荐(Set未定义length)
- // set.length // ❌ 编译错误
- val map = Map("a" -> 1, "b" -> 2)
- map.size // ✅ 正确
复制代码 - 惰性集合(如 Stream):
- val stream = Stream.from(1).take(3)
- stream.size // ✅ 计算元素数量(需遍历)
复制代码 5. Spark 中 groupByKey 返回的范例
groupByKey 返回的是 RDD[(K, Iterable[V])],其中 Iterable 是通用接口,只能用 size。
原因:
Spark 的分布式环境中,数据大概分布在多个节点,集合的具体实现大概是:
- 并行集合:需聚合各分区的元素数量。
- 迭代器:元素数量需动态盘算(如从外部数据源流式读取)。
6. 最佳实践建议
- 优先使用 size:
- 对于未知范例的集合(如通用接口 Iterable),统一用 size 制止编译错误。
- 根据集合范例选择:
- 若明确集合是 Array 或 List,可用 length(性能微优)。
- 若集合范例不确定(如函数参数为 Iterable),必须用 size。
- 性能注意事项:
- 对于某些集合(如 Stream),size 大概需要遍历整个集合(O (n)),需审慎使用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |