• 【Spark】scala基础操作(持续更新)


    零、IDEA的scala环境配置

    安装scala 插件
    打开菜单 [File] → [Settings] → [Plugins],搜索scala,点击[install]

    给项目添加scala模块
    右键 [项目] → [Add Frameworks Support] → [Scala] → [Create],选择scala的sdk

    在源文件目录创建scala目录
    右键 [src源目录] → [New] → [Directory],新建scala目录

    将scala目录转换成源目录
    右键 [scala目录] → [Mark Directory as] → [Sources Root]

    一、scala特点

    Spark支持使用Scala、Java、Python和R语言进行编程。由于Spark采用Scala语言进行开发,因此,建议采用Scala语言进行Spark应用程序的编写。Scala是一门现代的多范式编程语言,平滑地集成了面向对象和函数式语言的特性,旨在以简练、优雅的方式来表达常用编程模式。Scala语言的名称来自于“可伸展的语言”,从写个小脚本到建立个大系统的编程任务均可胜任。Scala运行于Java平台(JVM,Java 虚拟机)上,并兼容现有的Java程序。

    1.1 面向对象特性

    Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述。
    类抽象机制的扩展有两种途径(能避免多重继承的种种问题):一种途径是子类继承,另一种途径是灵活的混入机制。

    1.2 函数式编程

    Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型。

    可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。

    1.3 静态类型

    Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

    • 泛型类
    • 协变和逆变
    • 标注
    • 类型参数的上下限约束
    • 把类别和抽象类型作为对象成员
    • 复合类型
    • 引用自己时显式指定类型视图
    • 多态方法

    二、代码简单测试栗子

    右键 [scala目录] → [New] → [Scala Class],新建文件xxx.scala:

    /**
     * object 单例对象中不可以传参,
     * 如果在创建Object时传入参数,那么会自动根据参数的个数去Object中寻找相应的apply方法
     */
    object Lesson_ObjectWithParam {
      // object相当于java的工具类
      def apply(s:String) = {
        println("name is "+s)
      }
      def apply(s:String,age:Int) = {
        println("name is "+s+",age = "+age)
      }
      def main(args: Array[String]): Unit = {
        Lesson_ObjectWithParam("zhangsang")
        Lesson_ObjectWithParam("lisi",18)
      }
    }
    //name is zhangsang
    //name is lisi,age = 18
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    三、scala trait(特征)

    • trait类似java的接口,但是和接口不同的是,trait还能定义属性和方法的实现。
    • 一般情况下Scala的类只能够继承单一父类,如果是trait就可以实现多重继承。
    • 下面的栗子是trait特征由isEqualisNotEqual方法组成(前者没有定义具体的方法实现,后者有),类似java的抽象类。
    trait Equal {
      def isEqual(x: Any): Boolean
      def isNotEqual(x: Any): Boolean = !isEqual(x)
    }
    
    class Point(xc: Int, yc: Int) extends Equal {
      var x: Int = xc
      var y: Int = yc
      def isEqual(obj: Any) =
        obj.isInstanceOf[Point] &&
        obj.asInstanceOf[Point].x == x
    }
    
    object Test {
       def main(args: Array[String]) {
          val p1 = new Point(2, 3)
          val p2 = new Point(2, 4)
          val p3 = new Point(3, 3)
    
          println(p1.isNotEqual(p2))
          println(p1.isNotEqual(p3))
          println(p1.isNotEqual(2))
       }
    }
    /* false  true   true  */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    四、常见问题

    4.1 IDEA安装完插件Scala后 通过add frameworks support找到不到scala插件

    IDEA安装完插件Scala后 通过add frameworks support找到不到scala插件,不过可能也解决不了。

    Reference

    [1] https://docs.scala-lang.org/getting-started/index.html
    [2] scala基础教程
    [3] https://www.runoob.com/scala/scala-traits.html
    [4] Spark-Mac上IDEA配置Spark开发环境
    [5] Idea配置和运行scala
    [6] IDEA配置JDK的几种方式
    [7] scala——关键字trait的使用
    [8] 厦大大数据之Spark入门教程(Scala版)

  • 相关阅读:
    商业模式的关键点有哪些,推荐商业模式的6个要素
    什么是列间空调?
    VR元宇宙的概念|VR体验店加盟|虚拟现实设备销售
    AI-逻辑回归模型
    AI人工智能大模型业务到底有多烧钱?
    Dart(6)-类
    自动驾驶--预测技术
    Vue3使用ElementUI按需自动引入
    【嵌入式硬件】快衰减和慢衰减
    周志华《机器学习》课程系列笔记——目录导航页
  • 原文地址:https://blog.csdn.net/qq_35812205/article/details/124600627