Scala入门必知必会

1、 为什么要学习scala?

  1. 在线计算 spark scala ,a.spark 底层是scala ,我们需要看源码
    b.scala 基于java ,开发效率高,运行速度快

2、 scala的介绍

  1. scala 是一门多范式的编程语言,即面向对象也是函数式编程
    面向对象:万物皆对象 封装 实例对象 类 继承
    函数式编程: 面向过程 函数当成编程

3、 scala语言和Java语言对比
        相同点:

  1. java和scala可以无缝混编,它们都是基于jvm

  2. 二者可以相互调用

    不同点:
    1、 类型自动推断,并如果写类型化,是写在变量名的后面
    2、val var
    3、支持函数式编程
    4、构造器不一样
    5、java中可以自动默认值,scala中必须手动给默认值
    6、scala 不需要分号,但是java 必须要有
    7、get set 方法自己实现
          age:相当于java中的getter方法
          age_$eq:相当于java中set方法
    8、java中的放回只用return scala 中没有return

5、main方法讲解
main(static=object)

  1. 语法
	关键字 方法名 (参数):返回值类型={
		方法体
		}
	def main(args: Array[String]): Unit = {
	}

6、常量和变量

  1. 定义
    常量:是在运行的过程中,其值不会发生变化的量 例如:数值3 字母A 修饰的关键字val
    变量:是在运行的过程中,其值可以发生变化的量 例如:时间,年龄 修饰的关键字var

  2. scala中的数据数据类型
    any是所有类型的超类,也成为顶级类型
    anyVal (值类型) :
             int short  byte  long  double string char boolean Uint (9个)
    长度:4    2       1       8       8          4      2          1        空
    anyRef(引用类型) :
    List map option yourclass …
    注意:java类型中没有和scala中Nothing对应的类型

  3. 懒加载

    1. scala 中使用lazy 关键字修饰变量,就是惰性变量,实现延迟加载
      注意:惰性变量只能是常量,并且只有在调用惰性变量时,才会去实例化这个变量
    2. 案例演示
	//正常的	  
    var str = {
      println("helloworld")
    }
	//懒加载的形式
		lazy val str1 = {
			  println("helloworld")
			}
	//调用这个变量
    str1
  1. 好处
    使用在比较耗时的业务中,如网络IO 磁盘IO 场景:

9、 差值器
       scala中有三种插值器

  1. 在任何字符串前面加上s,就可直接在字符串中使用变量了
val name:String="cat"
println(s"she is name is ${name}")
  1. f 插值器: 保留小数点后两位
 val height=1.23568
 println(f"身高是${height}%.2f")
  1. raw插值器:是输入字符串原样,不进行转义

在这里插入图片描述
输出结果:
在这里插入图片描述

补充知识:

访问修饰符
    private:一个类的内部可用
    protected:自己类 子类也可以被访问(这个比java更加严格,java同一个包的其他类也可以访问)
   public:如果没有指定修饰符 ,这样的成员在任何地方都可以被访问
注意:
   如果不指定的情况下,就是public

类型转换

  1. String 类型转换为Int
	val age:String ="123"
	println(age.toInt.getClass.getName)
  1. Int 类型转换为String
    val b:Int =123
    println(b.toString.getClass.getName)
  1. String类型转换为Float类型
	val c:String ="123.123"
    println(c.toFloat.getClass.getName)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是预测泰坦尼克号上的生还情况的Spark Scala代码示例: ```scala // 导入Spark相关的库 import org.apache.spark.sql.SparkSession import org.apache.spark.ml.feature.{StringIndexer, VectorAssembler} import org.apache.spark.ml.classification.{DecisionTreeClassifier, RandomForestClassifier} import org.apache.spark.ml.evaluation.BinaryClassificationEvaluator import org.apache.spark.ml.tuning.{ParamGridBuilder, CrossValidator} // 创建SparkSession val spark = SparkSession.builder.appName("Titanic Prediction").getOrCreate() // 读取数据集 val data = spark.read.csv("titanic.csv", header=true, inferSchema=true) // 删除无用特征 val cols = Array("PassengerId", "Name", "Ticket", "Cabin") val data = data.drop(cols:_*) // 将字符串类型的特征转换为数值类型 val genderIndexer = new StringIndexer().setInputCol("Sex").setOutputCol("GenderIndex") val embarkedIndexer = new StringIndexer().setInputCol("Embarked").setOutputCol("EmbarkedIndex") val data = genderIndexer.fit(data).transform(data) val data = embarkedIndexer.fit(data).transform(data) // 处理缺失值 val data = data.na.fill(0) // 特征工程 val assembler = new VectorAssembler().setInputCols(Array("Pclass", "Age", "SibSp", "Parch", "Fare", "GenderIndex", "EmbarkedIndex")).setOutputCol("features") val data = assembler.transform(data) // 划分训练集和测试集 val Array(train, test) = data.randomSplit(Array(0.7, 0.3), seed=42) // 构建决策树模型 val dt = new DecisionTreeClassifier().setLabelCol("Survived").setFeaturesCol("features") val dtParamGrid = new ParamGridBuilder().addGrid(dt.maxDepth, Array(3, 5, 7)).build() val dtCrossValidator = new CrossValidator().setEstimator(dt).setEstimatorParamMaps(dtParamGrid).setEvaluator(new BinaryClassificationEvaluator().setLabelCol("Survived").setRawPredictionCol("rawPrediction").setMetricName("areaUnderROC")).setNumFolds(5) val dtModel = dtCrossValidator.fit(train) // 构建随机森林模型 val rf = new RandomForestClassifier().setLabelCol("Survived").setFeaturesCol("features") val rfParamGrid = new ParamGridBuilder().addGrid(rf.numTrees, Array(10, 20, 50)).addGrid(rf.maxDepth, Array(3, 5, 7)).build() val rfCrossValidator = new CrossValidator().setEstimator(rf).setEstimatorParamMaps(rfParamGrid).setEvaluator(new BinaryClassificationEvaluator().setLabelCol("Survived").setRawPredictionCol("rawPrediction").setMetricName("areaUnderROC")).setNumFolds(5) val rfModel = rfCrossValidator.fit(train) // 评估模型 val dtPredictions = dtModel.transform(test) val rfPredictions = rfModel.transform(test) val dtAUC = new BinaryClassificationEvaluator().setLabelCol("Survived").setRawPredictionCol("rawPrediction").setMetricName("areaUnderROC").evaluate(dtPredictions) val rfAUC = new BinaryClassificationEvaluator().setLabelCol("Survived").setRawPredictionCol("rawPrediction").setMetricName("areaUnderROC").evaluate(rfPredictions) // 输出模型性能 println("Decision Tree AUC: " + dtAUC) println("Random Forest AUC: " + rfAUC) ``` 这个代码示例与之前的Python版本代码相似,包括了数据读取、数据清洗、特征工程、模型构建和模型评估等多个步骤。其中,我们使用了决策树和随机森林两种分类算法来预测泰坦尼克号上的生还情况,并使用交叉验证和网格搜索来优化模型性能。最后,我们输出了两个模型的AUC值作为模型性能的指标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值