当前位置: 首页 > news >正文

怎样建造网站模特公司网站源码

怎样建造网站,模特公司网站源码,wordpress防机人注册,代理浏览器在线mapGroups 是 Spark 中一个强大的分组操作函数,它允许你对每个分组应用自定义逻辑并返回一个结果。以下是多个使用简单样例数据的具体用法示例。基础示例数据假设我们有一个简单的学生成绩数据集:// 创建示例DataFrame val studentScores Seq(("Ma…

mapGroups 是 Spark 中一个强大的分组操作函数,它允许你对每个分组应用自定义逻辑并返回一个结果。以下是多个使用简单样例数据的具体用法示例。

基础示例数据

假设我们有一个简单的学生成绩数据集:

// 创建示例DataFrame
val studentScores = Seq(("Math", "Alice", 85),("Math", "Bob", 92),("Math", "Charlie", 78),("Science", "Alice", 88),("Science", "Bob", 95),("Science", "Charlie", 82),("English", "Alice", 90),("English", "Bob", 87),("English", "Charlie", 91)
).toDF("subject", "name", "score")// 按科目分组
val grouped = studentScores.groupByKey(row => row.getAs[String]("subject"))

示例 1: 计算每科平均分

val subjectAverages = grouped.mapGroups { (subject, iterator) =>var total = 0var count = 0while (iterator.hasNext) {val row = iterator.next()total += row.getAs[Int]("score")count += 1}(subject, if (count > 0) total.toDouble / count else 0.0)
}.toDF("subject", "average_score")subjectAverages.show()

输出结果:

+--------+------------------+
| subject|     average_score|
+--------+------------------+
|   Math|              85.0|
|Science|              88.33|
|English|              89.33|
+--------+------------------+

示例 2: 找出每科最高分和学生

val topScores = grouped.mapGroups { (subject, iterator) =>var maxScore = Int.MinValuevar topStudent = ""while (iterator.hasNext) {val row = iterator.next()val score = row.getAs[Int]("score")val name = row.getAs[String]("name")if (score > maxScore) {maxScore = scoretopStudent = name}}(subject, topStudent, maxScore)
}.toDF("subject", "top_student", "top_score")topScores.show()

输出结果:

+--------+-----------+---------+
| subject|top_student|top_score|
+--------+-----------+---------+
|   Math|        Bob|       92|
|Science|        Bob|       95|
|English|    Charlie|       91|
+--------+-----------+---------+

示例 3: 计算每科成绩分布(统计各分数段人数)

val scoreDistribution = grouped.mapGroups { (subject, iterator) =>var excellent = 0  // 90-100var good = 0       // 80-89var average = 0    // 70-79var below = 0      // <70while (iterator.hasNext) {val row = iterator.next()val score = row.getAs[Int]("score")if (score >= 90) excellent += 1else if (score >= 80) good += 1else if (score >= 70) average += 1else below += 1}(subject, excellent, good, average, below)
}.toDF("subject", "excellent", "good", "average", "below_70")scoreDistribution.show()

输出结果:

+--------+---------+----+-------+-------+
| subject|excellent|good|average|below_70|
+--------+---------+----+-------+-------+
|   Math|        1|   1|      1|      0|
|Science|        1|   2|      0|      0|
|English|        1|   2|      0|      0|
+--------+---------+----+-------+-------+

示例 4: 为每科生成成绩报告

val subjectReports = grouped.mapGroups { (subject, iterator) =>var students = List[String]()var scores = List[Int]()var total = 0var count = 0while (iterator.hasNext) {val row = iterator.next()val name = row.getAs[String]("name")val score = row.getAs[Int]("score")students = name :: studentsscores = score :: scorestotal += scorecount += 1}val average = if (count > 0) total.toDouble / count else 0.0val maxScore = if (scores.nonEmpty) scores.max else 0val minScore = if (scores.nonEmpty) scores.min else 0s"Subject: $subject | Students: ${students.mkString(", ")} | " +s"Average: $average | Max: $maxScore | Min: $minScore"
}.toDF("report")subjectReports.show(false)

输出结果:

+---------------------------------------------------------------------------+
|report                                                                     |
+---------------------------------------------------------------------------+
|Subject: Math | Students: Charlie, Bob, Alice | Average: 85.0 | Max: 92 | Min: 78|
|Subject: Science | Students: Charlie, Bob, Alice | Average: 88.33 | Max: 95 | Min: 82|
|Subject: English | Students: Charlie, Bob, Alice | Average: 89.33 | Max: 91 | Min: 87|
+---------------------------------------------------------------------------+

示例 5: 计算每科成绩的标准差

val subjectStdDev = grouped.mapGroups { (subject, iterator) =>var scores = List[Double]()var sum = 0.0var count = 0// 第一次遍历:计算平均值while (iterator.hasNext) {val row = iterator.next()val score = row.getAs[Int]("score").toDoublescores = score :: scoressum += scorecount += 1}if (count == 0) {(subject, 0.0)} else {val mean = sum / count// 第二次遍历:计算方差var variance = 0.0scores.foreach(score => {variance += Math.pow(score - mean, 2)})variance /= count// 计算标准差val stdDev = Math.sqrt(variance)(subject, stdDev)}
}.toDF("subject", "std_dev")subjectStdDev.show()

输出结果:

+--------+------------------+
| subject|           std_dev|
+--------+------------------+
|   Math| 5.88784057761515|
|Science|5.507570547286102|
|English|1.699673171197595|
+--------+------------------+

示例 6: 为每个科目创建自定义摘要

val customSummaries = grouped.mapGroups { (subject, iterator) =>// 收集所有数据val data = iterator.toList.map(row => (row.getAs[String]("name"), row.getAs[Int]("score")))// 排序val sorted = data.sortBy(-_._2)// 计算统计量val scores = sorted.map(_._2)val average = scores.sum.toDouble / scores.lengthval median = if (scores.length % 2 == 1) {scores(scores.length / 2)} else {(scores(scores.length / 2 - 1) + scores(scores.length / 2)) / 2.0}// 创建自定义摘要val summary = Map("subject" -> subject,"top_student" -> sorted.head._1,"top_score" -> sorted.head._2,"average" -> average,"median" -> median,"student_count" -> scores.length)summary
}.toDF("summary")customSummaries.show(false)

输出结果:

+-----------------------------------------------------------------------------------------+
|summary                                                                                  |
+-----------------------------------------------------------------------------------------+
|Map(subject -> Math, top_student -> Bob, top_score -> 92, average -> 85.0, median -> 85.0, student_count -> 3)|
|Map(subject -> Science, top_student -> Bob, top_score -> 95, average -> 88.33, median -> 88.0, student_count -> 3)|
|Map(subject -> English, top_student -> Charlie, top_score -> 91, average -> 89.33, median -> 90.0, student_count -> 3)|
+-----------------------------------------------------------------------------------------+

注意事项

  1. 内存使用mapGroups 会将整个分组的数据加载到内存中,因此对于非常大的分组,可能会导致内存不足的问题。

  2. 性能考虑:对于简单的聚合操作(如求和、计数),使用 Spark 内置的聚合函数通常比 mapGroups 更高效。

  3. 数据倾斜:如果某些分组特别大,可能会导致任务执行时间过长。

  4. 迭代器使用mapGroups 提供的迭代器只能遍历一次,如果需要多次访问数据,需要先将其转换为列表或数组。

  5. 类型安全:使用 mapGroups 时,返回的数据类型需要与预期的输出类型匹配,否则可能会在运行时出现错误。

mapGroups 是一个非常灵活的函数,适用于需要自定义复杂分组逻辑的场景。通过上述示例,你可以看到它可以用于各种统计计算、数据转换和报告生成任务。

http://www.dtcms.com/a/429949.html

相关文章:

  • 淘宝网站开发店铺什么类别深圳效果图制作公司
  • 网站备案全国合作拍照点 腾讯云网站开发过程中遇到的问题
  • 网站上的图片怎么替换怎样从网上注册公司
  • 网站霸屏对网站好吗做网站推广的销售发的朋友圈
  • asp网站301余姚做百度网站
  • 网站模板漏洞wordpress无刷新分页
  • 网站页面设计欣赏申请网站空间
  • 长页在线制作网站宿州网站制作
  • 公司网站建设审批流程seo网络推广是什么意思
  • 合肥长丰路网站建设网站建设响应式是什么
  • 网站建设柚子网络科技联系方式wordpress怎么更改后台访问地址
  • 电子商务公司网站建设比较好的开源cms系统
  • 江苏省建设科技发展中心网站简介上海网站建设哪里便宜
  • 欧美设计网站河南网络洛阳网站建设河南网站建设
  • 网站设计做哪些准备北京网站制作公司哪家好
  • 企业营销型网站建设哪家公司好做衣服的网站推荐
  • 如何制作一个网站wordpress 编辑器设置
  • 公司网站管理属于什么职位手机在线做ppt的网站有哪些
  • 替老外做网站网站制作方案大全
  • 做运营必看的网站vi设计合同范本最新版
  • 开发一个网站需要多少时间o2o网站建设怎么样
  • 成都网站建设 工资深圳全网营销网站建设
  • 高端企业网站建设规定网站建设公司专业网站制作开发
  • 做网页设计卖钱的网站推广品牌
  • 信息系统推广方案安卓优化大师2023
  • 为什么别的电脑能打开的网站我的电脑打不开2015年做那些网站能致富
  • 微信公众号微网站开发类型建站系统多少钱
  • 现在开什么网站网站验收
  • 信息网站建设方案saas建站 彩页
  • php网站开发需要什么软件网站后台登录代码