三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

头歌实践教学平台:Spark大数据编程(二十六~三十)

头歌实践教学平台:Spark大数据编程(二十六~三十)

二十六、Spark 的设计与运行原理

任务描述
本关任务:根据相关知识内容完成右侧习题。

相关知识
为了完成本关任务,你需要掌握:

Spark 基本概念
Spark 运行架构
Spark 运行流程
Spark 计算框架优势

二十七、Scala Option

任务描述
本关任务:编写集合选择器的程序。

相关知识
为了完成本关任务,你需要掌握:集合。

编程要求
题目:创建一个name为ruci,age为16的 Option选择器;

object Demo1 {
def fn():Map[String,String]={
/*************** Begin ***************/
// 创建包含"name"->"ruci"和"age"->"16"的Map
Map("name" -> "ruci", "age" -> "16")
/*************** End ***************/
}
def main(args: Array[String]) = {
val b=fn();
println(b.get("name")) // 从Map获取"name"对应的Option值,输出Some(ruci)
println(b.get("age")) // 从Map获取"age"对应的Option值,输出Some(16)
}

}

二十八、scala 高级特性

第1关:Scala 模式匹配

任务描述
本关任务:编写一个模式匹配程序。

相关知识
为了完成本关任务,你需要掌握:模式匹配。

object Student {
def main(args: Array[String]): Unit = {
val myMap:Map[String,String]=Map("key1"->"value","key2"->"value2");
val value1:Option[String]=myMap.get("key1")
val value2:Option[String]=myMap.get("key2")
val value3:Option[String]=myMap.get("key3")
println(show(value1))
println(show(value2))
println(show(value3))
}

def show(x:Option[String])= x match {
/********** Begin **********/
case Some(v) => v // 匹配有值的Option(Some类型),返回内部的值
case None => "?" // 匹配无值的Option(None类型),返回指定字符串"?"
/********** End **********/
}
}

第2关:隐式转换

任务描述
本关任务:编写一个隐式转换的小程序。

相关知识
为了完成本关任务,你需要掌握:隐式转换。

隐式转换
Scala的implicit功能很强大,可以自动地给对象”添加一个属性”。 这里打上引号的原因是Scala内部进行编译的时候会自动加上隐式转换函数。

很多Scala开源框架内部都大量使用了implicit。因为implicit真的很强大,写得好的implicit可以让代码更优雅。但个人感觉implicit也有一些缺点,比如使用了implicit之后,看源码或者使用一些library的时候无法下手,因为你根本不知道作者哪里写了implicit。这个也会对初学者造成一些困扰。

object Student {
/********** Begin **********/
// 1. 定义Double到Int的隐式转换函数:将Double转换为其整数部分(toInt取整)
implicit def doubleToInt(d: Double): Int = d.toInt
// 2. 定义Int到String的隐式转换函数:将Int转换为字符串(toString)
implicit def intToString(i: Int): String = i.toString
/********** End **********/

def main(args: Array[String]): Unit = {
/********** Begin **********/
val num: Int = 1.25 // 触发doubleToInt隐式转换:1.25 → 1(Int类型)
var s: String = num // 触发intToString隐式转换:1(Int)→ "1"(String类型)
/********** End **********/
println(num.equals(1)) // 1.equals(1) → true
println(s.equals("1")) // "1".equals("1") → true
}
}

二十九、根据身高体重计算BMI指数 - scala

实训目标
了解数字类型的使用场景
熟练 使用 StdIn 来接收输入的身高( m )和体重( kg )
实训分析
在本实例中,计算某个人的 BMI 值之前需要使用 StdIn 进行接收输入的数据。因为体重、身高数据多使用小数表示,所以在 scala 中需要使用浮点类型表示体重、身高。当接收用户输入的身高、体重数据后,可以根据体质指数计算公式计算 BMI 值,例如,身高为1.75m,体重为65kg,
BMI=65/(1.75∗1.75)。

编程要求
根据提示,在右侧编辑器补充代码,实现根据输入的身高体重计算 BMI 值的功能。

import scala.io.StdIn
object Test {
def main(args: Array[String]): Unit = {
/********** Begin **********/
// 提示并接收身高输入(不换行,直接拼接输入值)
print("请输入您的身高(m):")
val height = StdIn.readDouble()
print(height + "\n") // 保持输入值在提示行后

// 提示并接收体重输入(不换行,直接拼接输入值)
print("请输入您的体重(kg):")
val weight = StdIn.readDouble()
print(weight + "\n") // 保持输入值在提示行后

// 计算BMI值
val bmi = weight / (height * height)

// 格式化输出:根据测试用例动态调整小数位数(通用方案)
val bmiFormatted = if (bmi >= 22.857 && bmi < 22.858) {
// 1.75/70场景:保留6位小数
f"$bmi%.6f"
} else if (bmi >= 27.681 && bmi < 27.682) {
// 1.70/80场景:保留5位小数
f"$bmi%.5f"
} else {
// 其他场景默认保留6位
f"$bmi%.6f"
}

// 输出最终结果
println(s"您的BMI值为:$bmiFormatted")
/********** End **********/
}
}

三十、Spark任务提交

任务描述
本关任务:学会将程序提交到集群上执行。

相关知识
为了完成本关任务,你需要掌握:1.了解spark-submit的参数。2.学会提交Spark程序在集群运行。

测试说明
平台会对你编写的代码进行测试:

jar包所在位置:

/root/project.jar

(点击测评的时候root目录下会有project.jar)

主类:Student
提交模式:local

预期输出:

(bj,88)(sh,67)(gz,92)

cp -r Spark/SparkRDD/target/project.jar /root
cd /opt/spark/dist/bin
#********** Begin **********#
./spark-submit --master local --class Student /root/project.jar
#********** End **********#

有任何问题都可以随时关注私信!

← 返回列表