23篇大数据系列(二)scala基础知识全集(史上最全,建议收藏)

39 篇文章 291 订阅
订阅专栏

作者简介:

蓝桥签约作者、大数据&Python领域优质创作者。管理多个大数据技术群,帮助大学生就业和初级程序员解决工作难题。

我的使命与愿景:持续稳定输出,赋能中国技术社区蓬勃发展!

大数据系列文章,从技术能力、业务基础、分析思维三大板块来呈现,你将收获:

❖ 提升自信心,自如应对面试,顺利拿到实习岗位或offer;

❖ 掌握大数据的基础知识,与其他同事沟通无障碍;

❖ 具备一定的项目实战能力,对于大数据工作直接上手;

评论、点赞、收藏是对我最大的支持!!!


大数据工程师系列专栏: 面试真题、开发经验、调优策略

大数据工程师知识体系:

大数据时代已经到来

最近几十年,高速发展的互联网,渗透进了我们生活的方方面面,整个人类社会都已经被互联网连接为一体。身处互联网之中,我们无时无刻不在产生大量数据,如浏览商品的记录、成交订单记录、观看视频的数据、浏览过的网页、搜索过的关键词、点击过的广告、朋友圈的自拍和状态等。这些数据,既是我们行为留下的痕迹,同时也是描述我们自身最佳的证据。

2014年3月,马云曾经在北京的一次演讲中说道:“人类正从IT时代走向DT时代”。7年过去了,正如马云预想的那样,大数据时代已经到来了。

大数据工程师的工作内容是什么?

而大数据时代,有一个关键性的岗位不得不提,那就是大数据工程师。想必大家也会好奇,大数据工程师,日常是做什么的呢? 

1.数据采集找出描述用户或对业务发展有帮助的数据,并将定义相关的数据格式,交由业务开发部门负责收集对应的数据。
2.ETL工程 对收集到的数据,进行各种清洗、处理、转化等操作,完成格式转换,便于后续分析,保证数据质量,以便得出可以信赖的结果。
3.构建数仓将数据有效治理起来,构建统一的数据仓库,让数据与数据间建立连接,碰撞出更大的价值。
4.数据建模基于已有的数据,梳理数据间的复杂关系,建立恰当的数据模型,便于分析出有价值的结论。
5.统计分析对数据进行各种维度的统计分析,建立指标体系,系统性地描述业务发展的当前状态,寻找业务中的问题,发现新的优化点与增长点。
6.用户画像

基于用户的各方面数据,建立对用户的全方位理解,构建每个特定用户的画像,以便针对每个个体完成精细化运营。

大数据工程师必备技能

那么,问题来了,如果想成为一名大数据工程师,胜任上述工作内容,需要具备什么样的条件?拥有什么样的知识呢?

分类

子分类

技能

描述

编程基础

Java基础

大数据生态必备的java基础

Scala基础

Spark相关生态的必备技能

SQL基础

数据分析师的通用语言

SQL进阶

完成复杂分析的必备技能

大数据框架

HDFS&YARN

大数据生态的底层基石

Hive基础

大数据分析的常用工具

Hive进阶

大数据分析师的高级装备

Spark基础

排查问题必备的底层运行原理

Spark SQL

应对复杂任务的利刃

工具

Hue&Zeppelin

通用的探索分析工具

Azkaban

作业管理调度平台

Tableau

数据可视化平台

业务基础

数据收集

数据是如何收集到的?

ETL工程

怎么清洗、处理和转化数据?

数据仓库基础

如何完成面向分析的数据建模?

元数据中心

如何做好数据治理?

分析思维

数据分析思维方法论

怎么去分析一个具体问题?

排查问题思维

如何高效排查数据问题?

指标体系

怎么让数据成体系化?

Scala为什么会如此重要,作者觉得主要有以下三点原因:

1、因为spark 

大部分从事大数据的工程师是先了解Spark进而再去选择学习Scala的,因为Spark是用Scala开发的。现在Spark是大数据领域的杀手级应用框架,只要搭建了大数据平台,都会大量使用Spark来处理和分析数据,而要想学好Spark,Scala这一关必须是要过的。顺便说一句,Kafka也是基于Scala开发的。

2、无缝对接大数据生态组件 

众所周知,大数据生态的大部分组件都是java语言开发的。而Scala是一门基于JVM的语言,可以与java无缝混编,因此可以很好地融合到大数据生态圈。

3、适合大数据处理与机器学习 

Scala的语法简洁而富有表达力,更容易掌握。Scala将面向对象与函数式编程相结合,功能强大且简练,非常适合用于处理各种数据。因此,在大数据处理与机器学习中占有重要的地位。

针对大数据分析师必须掌握的scala基础知识,本文的讲解思路如下:

第1部分:scala特性。主要讲解面向对象特性、函数式编程、静态类型、扩展性和并发性。

第2部分:表达式。在scala中一切皆为表达式,理解表达式是理解其语法的前提。

第3部分:方法与函数。主要讲两者之间的区别和转换。

第4部分:模式匹配。讲解常用的几种模式,并举例说明。

5部分:scala trait。讲解特质的基本特性和示例。

6部分:集合操作。主要针对常用集合和集合函数的讲解和介绍。

7部分:读取数据源。只针对scala如何通过Source类读取数据源进行简单介绍。

8部分:隐式转换、隐式参数。主要讲解Java和scala之间的类型转换,以及通过一个实例介绍一下隐式参数的概念。

9部分:正则匹配。主要讲解如何写正则相关的代码。

第10部分:异常处理。介绍scala和java的异常有何区别。

第11部分:类型层级。主要介绍scala的类型层级体系。

第12部分:基本数值类型转换。讲解scala与java基本数值类型转换常遇到的问题。

scala基础知识

一、Scala特性

面向对象特性 

Scala是一种纯面向对象的语言,彻底贯彻万物皆对象理念。对象的类型和行为是由类和特质来描述的。Scala引入特质(trait)来改进Java的对象模型,使得可以通过混入特质的方式,扩展类的功能。

函数式编程 

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

静态类型 

Scala拥有一个强大表达能力的类型系统,通过编译时检查,保证代码的安全性和一致性。Scala具备类型推断的特性,这使得开发者可以不去额外标明重复的类型信息,让代码看起来更加整洁易读。

 扩展性 

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构。

二、表达式

在scala中,一切皆为表达式。scala非常推崇表达式语法,因为表达式语法,对函数式编程是非常友好的。对开发者而言,表达式语法,使得代码非常简洁易读。

举个例子,我们在定义方法时,会和声明变量一样,使用等号(=)连接,等号左侧是函数名、参数列表和返回值类型(可以省略),而等号右边便是一个由大括号({})包裹的多行表达式。

表达式,是一定会有返回值的。在java中使用void来声明无返回值的方法,而在scala里,这种情况也会有返回值,会返回一个Unit,这是一个特定的值,表示忽略方法的返回值。

三、方法与函数

初学scala时,往往会觉得方法和函数的概念有些模糊,在使用中可能会搞不清楚到底该使用方法还是函数。那怎么区分呢?关键是看这个函数是否在类中定义,在类中定义就是方法,所以Scala 方法是类的一部分。Scala 中的函数则是一个完整的对象,可以赋给一个变量。不过,在scala中,方法和函数是可以相互转化的。下面我们重点说下,如何把方法转为函数。

方法转函数

上文中提到任何方法都是在声明一个表达式,所以将方法转为函数也就非常简单了,相当于是把方法指向的表达式,又重新赋给了一个函数变量,这就是显式转化。还有另外一种写法,是通过偏应用函数的方式,将方法转化为一个新的函数,称作隐式转化。

1)隐式转化

val f2 = f1 _

2)显式转化

val f2: (Int) => Int = f1

四、模式匹配

模式匹配是检查某个值是否匹配某一个模式的机制。它是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句,以下介绍几种常用的模式匹配:常量模式、变量模式、通配符模式。

常量模式

常量模式匹配,就是在模式匹配中匹配常量。

object ConstantPattern{  def main(args:Array[String]) :Unit = {    //模式匹配结果作为函数返回值    def patternShow(x : Any) = x match {          //常量模式      case 5 => "五"      case true => "真"      case "test" => "字符串"      case null => "null值"      case Nil => "空列表"          //变量模式          case x => "变量"          //通配符模式      case _ => "通配符"    }  }}
变量模式和通配符模式,都可以匹配任意值,他们之间的区别是,变量模式匹配成功后,该变量中会存储匹配成功的值,在后续的代码中还可以引用,而通配符模式匹配成功后,不能再引用匹配到的值。另外要注意的是,由于模式匹配是按顺序匹配的,因此变量模式和通配符模式要写在表达式的最后面。

类型匹配模式

可以匹配输入变量的类型。

object TypePattern{  def main(args:Array[String]) :Unit = {  //类型匹配模式  def typePattern(t : Any) = t match {    case t : String => "String"    case t : Int => "Intger"    case t : Double => "Double"    case _ => "Other Type"    }  }}

case class模式

构造器模式指的是,直接在case语句后面接类构造器,匹配的内容放置在构造器参数中。

object CaseClassPattern{  def main(args:Array[String]) :Unit = {  //定义一个Person实例  val p = new Person("nyz",27)   //case class 模式  def constructorPattern(p : Person) = p match {     case Person(name,age) => "name =" + name + ",age =" + age     case _ => "Other"    }  }}

模式守卫

为了让匹配更加具体,可以使用模式守卫,也就是在模式后面加上if判断语句。

object ConstantPattern{  def main(args:Array[String]) :Unit = {    //模式匹配结果作为函数返回值    def patternShow(x : Any) = x match {          //模式守卫          case x if(x == 5) => "守卫"          //通配符模式      case _ => "通配符"    }  }}

Option匹配

在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None)。Some包装了某个值,None表示没有值。

class OptionDemo {  val map = Map (("a",18),("b",81))  //get方法返回的类型就是Option[Int]  map.get("b") match {    case some(x) => println(x)    case None => println("不存在")  }}

五、Scala Trait(特质)

Scala Trait(特质) 相当于 Java 的接口,但实际上它比接口的功能强大。与接口不同的是,它还可以定义属性和方法的实现。

一般情况下Scala的类只能够继承单一父类,但可以使用with关键字混入多个 Trait(特质) 。不过,如果一个scala类没有父类,那么它混入的第一个特质需要使用extends关键字,之后混入的特质使用with关键字。

Trait(特质) 定义的方式与类相似,但它使用的关键字是 trait,如下所示:

trait Equal {  def isEqual(x: Any): Boolean  def isNotEqual(x: Any): Boolean = !isEqual(x)}

以上特质(Equal)由两个方法组成:isEqual 和 isNotEqual。isEqual 方法没有定义方法的实现,isNotEqual定义了方法的实现。子类继承特质可以实现未被实现的方法。

以下演示了特质的完整实例:

trait Equal { def isEqual(x: Any): Boolean def isNotEqual(x: Any): Boolean = !isEqual(x)}

class Point(xc: Int, yc: Int) extends Equal {  val x: Int = xc  val 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))   }}

执行以上代码,输出结果为:

$ scalac Test.scala $ scala -cp . Testfalsetruetrue

六、集合操作

常用集合

通过下面的代码,可以了解常用集合的创建方式

// 定义整型 List,其元素以线性方式存储,可以存放重复对象。val x = List(1,2,3,4)
// 定义 Set,其对象不按特定的方式排序,并且没有重复对象。val x = Set(1,3,5,7)
// 定义 Map,把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。val x = Map("one" -> 1, "two" -> 2, "three" -> 3)
// 创建两个不同类型元素的元组,元组是不同类型的值的集合val x = (10, "Bigdata")
// 定义 Option,表示有可能包含值的容器,也可能不包含值。val x:Option[Int] = Some(5)

集合函数

工作中操作 Scala 集合时,一般会进行两类操作:转换操作(transformation )和行动操作(action)。第一种操作类型将集合转换为另一个集合,第二种操作类型返回某些类型的值。

1)最大值和最小值

先从行动函数开始。在序列中查找最大或最小值是一个极常见的需求。

先看一下简单的例子。

val numbers = Seq(11, 2, 5, 1, 6, 3, 9)  numbers.max //11 numbers.min //1

对于这种简单数据集合,Scala的函数式特性显露无疑,如此简单的取到了最大值和最小值。再来看一个数据集合复杂的例子。

case class Book(title: String, pages: Int)  val books = Seq(  Book("Future of Scala developers", 85),  Book("Parallel algorithms", 240),  Book("Object Oriented Programming", 130),  Book("Mobile Development", 495))  //下面代码返回Book(Mobile Development,495)books.maxBy(book => book.pages)  //下面代码返回Book(Future of Scala developers,85)books.minBy(book => book.pages)

minBy & maxBy方法解决了复杂数据的问题。

2)筛选-Filter

对集合进行过滤,返回满足条件的元素的新集合,比如过滤一组数据中的偶数。

val numbers = Seq(1,2,3,4,5,6,7,8,9,10) numbers.filter(n => n % 2 == 0)//上面返回Seq(2,4,6,8,10)

获取页数大于300页的书。

val books = Seq(  Book("Future of Scala developers", 85),  Book("Parallel algorithms", 240),  Book("Object Oriented Programming", 130),  Book("Mobile Development", 495))
books.filter(book => book.pages >= 300)//上面返回Seq(Book("Mobile Development", 495))

还有一个与 filter类似的方法是 filterNot,也就是筛选出不满足条件的对象。

3)Flatten

它的作用是将多个集合展开,组成一个新的集合,举例说明。

val abcd = Seq('a', 'b', 'c', 'd')val efgj = Seq('e', 'f', 'g', 'h')val ijkl = Seq('i', 'j', 'k', 'l')val mnop = Seq('m', 'n', 'o', 'p')val qrst = Seq('q', 'r', 's', 't')val uvwx = Seq('u', 'v', 'w', 'x')val yz   = Seq('y', 'z')  val alphabet = Seq(abcd, efgj, ijkl, mnop, qrst, uvwx, yz)
alphabet.flatten

执行后返回下面的集合:

List('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')

4)集合运算函数

集合运算即差集、交集和并集操作。

val num1 = Seq(1, 2, 3, 4, 5, 6)val num2 = Seq(4, 5, 6, 7, 8, 9)  //返回List(1, 2, 3)num1.diff(num2)  //返回List(4, 5, 6)num1.intersect(num2)  //返回List(1, 2, 3, 4, 5, 6, 4, 5, 6, 7, 8, 9)num1.union(num2)
//合并后再去重,返回List(1, 2, 3, 4, 5, 6, 7, 8, 9)num1.union(num2).distinct

5)map函数

map 函数的逻辑是遍历集合并对每个元素调用传入的函数进行处理。

val numbers = Seq(1,2,3,4,5,6)  //返回List(2, 4, 6, 8, 10, 12)numbers.map(n => n * 2)  val chars = Seq('a', 'b', 'c', 'd')  //返回List(A, B, C, D)chars.map(ch => ch.toUpper)

6)flatMap

它将map & flatten组合起来,请看下面的操作。

val abcd = Seq('a', 'b', 'c', 'd')  //List(A, a, B, b, C, c, D, d)abcd.flatMap(ch => List(ch.toUpper, ch))

从结果可以看出来是先做的map,然后做的flatten

7)forall & exists

forall是对整个集合做判断,当集合中的所有元素都满足条件时,返回true。而exists则是只要有一个元素满足条件就返回true。

val numbers = Seq(3, 7, 2, 9, 6, 5, 1, 4, 2)  //返回turenumbers.forall(n => n < 10)  //返回falsenumbers.forall(n => n > 5)
//返回truenumbers.exists(n => n > 5)

七、读取数据源

读取外部数据源是开发中很常见的需求,如在程序中读取外部配置文件并解析,获取相应的执行参数。这里只针对scala如何通过Source类读取数据源进行简单介绍。

import scala.io.Source

object ReadFile {  //读取ClasPath下的配置文件  val file = Source.fromInputStream(this.getClass.getClassLoader.getResourceAsStream("app.conf"))    
  //一行一行读取文件,getLines()表示读取文件所有行  def readLine: Unit ={    for(line <- file.getLines()){      println(line)    }  }   //读取网络上的内容  def readNetwork: Unit ={    val file = Source.fromURL("http://www.baidu.com")    for(line <- file.getLines()){      println(line)    }  }
 //读取给定的字符串-多用于调试 val source = Source.fromString("test") }

八、隐式转换

隐式转换是Scala中一种非常有特色的功能,是其他编程语言所不具有的,可以实现将某种类型的对象转换为另一种类型的对象。数据分析工作中,最常使用到的就是java和scala集合之间的互相转换,转换以后就可以调用另一种类型的方法。scala提供了scala.collection.JavaConversions类,只要引入此类中相应的隐式转化方法,在程序中就可以用相应的类型来代替要求的类型。

如通过以下转换,scala.collection.mutable.Buffer自动转换成了java.util.List。

import scala.collection.JavaConversions.bufferAsJavaListscala.collection.mutable.Buffer => java.util.List

同样,java.util.List也可以转换成scala.collection.mutable.Buffer。

import scala.collection.JavaConversions.asScalaBufferjava.util.List => scala.collection.mutable.Buffer

所有可能的转换汇总如下,双向箭头表示可互相转换,单箭头则表示只有左边可转换到右边。

import scala.collection.JavaConversions._
scala.collection.Iterable <=> java.lang.Iterablescala.collection.Iterable <=> java.util.Collectionscala.collection.Iterator <=> java.util.{ Iterator, Enumeration }scala.collection.mutable.Buffer <=> java.util.Listscala.collection.mutable.Set <=> java.util.Setscala.collection.mutable.Map <=> java.util.{ Map, Dictionary }scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap
scala.collection.Seq         => java.util.Listscala.collection.mutable.Seq => java.util.Listscala.collection.Set         => java.util.Setscala.collection.Map         => java.util.Mapjava.util.Properties   => scala.collection.mutable.Map[String, String]

隐式参数

所谓隐式参数,指的是在函数或者方法中,定义使用implicit修饰的参数。当调用该函数或方法时,scala会尝试在变量作用域中找到一个与指定类型相匹配的使用implicit修饰的对象,即隐式值,注入到函数参数中函数体使用。示例如下:

class SayHello{  def write(content:String) = println(content)}implicit val sayHello=new SayHello
def saySomething(name:String)(implicit sayHello:SayHello){ sayHello.write("Hello," + name)}
saySomething("Scala")
//打印 Hello,Scala

值得注意的是,隐式参数是根据类型匹配的,因此作用域中不能同时出现两个相同类型的隐式变量,否则编译时会抛出隐式变量模糊的异常。

九、正则匹配

正则的概念、作用和规则都在上一篇《大数据分析工程师入门--1.Java基础》中已经完整的讲述了,这里将通过示例来讲解下在scala中正则相关代码怎么写:

定义

val TEST_REGEX = "home\\*(classification|foundation|my_tv)\\*[0-9-]{0,2}([a-z_]*)".r

使用

//path是用来匹配的字符串TEST_REGEX findFirstMatchIn path match {  case Some(p) => {    //获取TEST_REGEX中的第一个括号里正则片段匹配到的内容    launcher_area_code = p.group(1)    //获取TEST_REGEX中的第二个括号里正则片段匹配到的内容    launcher_location_code = p.group(2)    }}

十、异常处理

学习过Java的同学对异常一定并不陌生,异常通常是程序执行过程中遇到问题时,用来打断程序执行的重要方式。关于异常处理的注意事项,在上一讲《大数据分析工程师入门--1.Java基础》里已经讲过了,这里就不再赘述了。我们重点来讲下scala和java在异常这个特性的设计上的不同。

1. 捕获异常的方式略有不同

java中是通过多个catch子句来捕获不同类型的异常,而在scala中是通过一个catch子句,加上模式匹配的类型匹配方式来捕获不同类型的异常。如下图所示:

图片

2.scala没有checked异常

在java中,非运行时异常在编译期是会被强制检查的,要么写try...catch...处理,要么使用throws关键字,将异常抛给调用者处理。而在scala中,更推崇通过使用函数式结构和强类型来减少对异常及其处理的依赖。因此scala不支持检查型异常(checked exception)。

当使用scala调用java类库时,scala会把java代码中声明的异常,转换为非检查型异常。

3.scala在throw异常时是有返回值的

在scala的设计中,所有表达式都是有返回值的。那么,自然throw表达式也不例外,throw表达式的返回值为Nothing。由于Nothing类型是所有类型的子类型,因此throw表达式可以出现在任意位置,而不会影响到类型的推断。

十一、类型层级

在scala中,所有的值都是有类型的,包括数值型值和函数,比java更加彻底地贯彻了万物皆对象的理念。因此,scala有一套自己的类型层级,如下图所示:

图片

(图片来自于网络)

如图中所示,scala的顶级类是Any,下面包含两个子类,AnyVal和AnyRef,其中AnyVal是所有值类型的父类,其中包含一个特殊的值Unit;而AnyRef是所有引用类型的父类,所有java类型和非值类型的scala类型都是它的子类。其中,有两个比较特殊的底层子类型,一个是Null,它是所有引用类型的子类型,可以赋给任何引用类型变量;另一个是Nothing,它是所有类型的子类,因此既可以赋给引用类型变量,也可以赋给值类型变量。

十二、基本数值类型转换

在scala中,通常会自动进行java和scala之间基本数值类型的转换,并不需要单独去处理。所以,在我们的感受中,通常java和scala的基本数据类型是可以无缝衔接的。但是,有一种情况是例外的,那就是当你引用第三方的java类库,而在它的代码中接收参数是Object类型,之后又对传入对象的实际数值类型做判断时,通常会失败报错。

原因很简单,第三方java类库,使用java语言编写,它只认得java的类型。当接收参数为Object类型时,scala默认不会转换成java的数值类型,这样当判断对象的具体数值类型时,会出现不认识scala对象类型的异常。

解决方案也很简单,只需要在传入第三方类库方法前,手动包装成java类型即可。以下是代码示例,本例演示了DBUtils类库传入scala类型时的处理,只展示了部分代码:

//由于java和scala中的类型短名称重名,为避免歧义,进行了重命名import java.lang.{Long => JLong, Double => JDouble}//conn为数据库连接,sql为要执行的SQL语句queryRunner.update(conn, sql, new JLong(1L), new JDouble(2.2))

总结

本文结合实际工作经验,把scala中最常用到的一些知识点进行了梳理,要想成为一名初级大数据工程师,这些知识是必须要掌握的。

大数据俱乐部、数据与智能:   https://blog.csdn.net/weixin_39032019/article/details/117997723

整理不易,评论、点赞、收藏是对我最大的支持!!!

大数据技术之scala
a18379692263的博客
07-03 1120
·scala入门:基本语法(变量和数据类型、运算符、流程控制) ·核心特性:函数式编程、面向对象、集合·其他特色:模式匹配、异常处理、隐式转换、泛型 Spark—新一代内存级大数据计算框架,是大数据的重要内容。 Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。 Spark的兴起,带动Scala语言的发展 在本机编辑高级环境中添加scala环境 测试环境是否正确搭建 下载完
大数据课程-Scala编程基础-5.Scala模式匹配_lk_edit.ppt
01-01
大数据课程——Scala编程基础,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有教学资料,可按照ppt以及教学文档直接教授
大数据课程-Scala编程基础-2.Scala语言基础_lk_edit.ppt
01-01
大数据课程——Scala编程基础,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有教学资料,可按照ppt以及教学文档直接教授
Spark大数据技术(Scala)小白教程(一)——大数据技术概述以及环境配置
weixin_68955195的博客
03-13 942
Apache Spark 是一个基于内存计算的大数据处理框架,提供了高性能和灵活性,支持多种数据处理模式。Spark 提供了丰富的 API,包括 Spark Core、Spark SQL、Spark Streaming、MLlib(机器学习库)和 GraphX(图计算库),使得用户可以方便地进行数据处理、数据分析和机器学习等任务。
大数据课程-Scala编程基础-1.Scala语言初识_lk_edit.ppt
01-01
大数据课程——Scala编程基础,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有教学资料,可按照ppt以及教学文档直接教授
大数据课程-Scala编程基础-3.Scala面对对象的特性_lk_edit.ppt
01-01
大数据课程——Scala编程基础,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有教学资料,可按照ppt以及教学文档直接教授
大数据技术之Scala
okbin1991的博客
11-07 319
第1章Scala入门 1.1 概述 1.1.1为什么学习Scala 1.1.2 Scala发展历史 1.1.3 Scala和Java关系 一般来说,学Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM之间的关系搞清楚,否则学习Scala你会蒙圈。 1.1.4 Scala语言特点 1.2Scala环境搭建 1)安装步骤 (...
scala 学习资料
07-22
学习spark的时候接触到的Scala语言,这里有一套学习资料,希望对大家有帮助。
大数据Scala
飘然生的博客
08-24 339
一。Scala概述 为何学习Scala? 可扩展,兼容java,语法简洁,静态类型化,支持并发控制(运行在JVM虚拟机上) 二。scala下载安装 1.jdk1.8 2.下载scala压缩包解压即安装成功,并配置环境变量 3.测试:启动CMD,运行scala查看版本信息 三。基础语法 1。声明与定义 常量声明:val val x:T = e 或 val x = e(类型省略,默认类型) 变量声明:var var x:T = 3 或 va
大数据-Scala
m0_58818478的博客
01-12 895
文章目录1.前言为什么要学习Scala学前寄语Scala简介Scala的诞生函数式编程Scala和java的关系Scala的特点Scala环境搭建SDK下载安装及测试2.IDEA插件安装3.第一个Scala工程4.Scala基础语法注释代码分隔变量和常量定义标识符关键字保留字方法和操作符5.Scala数据类型AnyVal值类型的转换自动类型转换强制类型转换值类型和String类型之间的相互转换6、运算符算数运算符赋值运算符关系运算符逻辑运算符位运算符7、流程控制顺序结构分支结构循环结构for循环while循
大数据课程-Scala编程基础-4.Scala数据结构_lk_edit.ppt
01-01
大数据课程——Scala编程基础,教师版,提供教学大纲、教案、教学设计、实训文档等,课程内容包含教学准备环境、软件安装、作业、教学文档、演示视频,花费巨额时间亲自制作,下载后可私信提供上述所有教学资料,可...
入门spark和Scala,拥有百万粉丝的大牛讲述学大数据开发的历程
2401_84181801的博客
04-08 943
觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)**[外链图片转存中…(img-lPKkXRO8-1712553721630)]
Scala大数据处理中的性能表现如何?
最新发布
JoshuaIngersoll的博客
04-19 722
本文从Scala的概述、在大数据处理框架中的应用、性能优化策略、实际案例分析以及挑战与未来展望等多个方面对Scala大数据处理中的性能表现进行了深入探讨。通过本文的介绍和分析,相信读者对Scala大数据处理中的优势和挑战有了更加面的了解,并能够对如何在实际应用中充分发挥Scala的性能有所启发。展望未来,随着大数据处理需求的不断增长和技术的不断创新,Scala大数据处理领域的应用前景将更加广阔。Scala作为一种多范式编程语言,以其简洁、高效和强大的特点,在大数据处理领域得到了广泛的应用。
大数据编程语言scala讲座
12-26
大数据库发展的今天,scala是java语言的新的发展,可以理解为java++,学习难度又不是很大,并且又适应新的大数据编程的需要。scala语言本身也可以和java语言一起互调,所以,是我们必须学习的语言。 本讲座以电子书为教基准,一章节一章节的按步就班的讲述,很适合刚入学scala的人,对有经验的scala编程者也有很大的帮助!
Scala基础知识
学习笔记
06-27 665
0. Scala简介 多范式 类似java, 可调用Java类库, 运行于JVM 初衷是实现可伸缩的语言 集成面向对象编程和函数式编程的各种特性 IDE选择idea 1. 入门 支持的数据类型 Scala中不存在基础数据类型,一律以类的形式出现 数据类型 含义 Byte 8位整数,-128~127 Short 16位整数,-32768~3276...
ScalaScala学习资料
weixin_34346099的博客
01-11 165
Scala学习资料   java 树形 分类器_百度搜索决策树分类器-Java实现 - CSDN博客KNN分类器-Java实现 - CSDN博客学习:java设计模式—分类 - 飞翔荷兰人 - 博客园SparkMLlib分类算法之决策树学习 - DamonDr - 博客园【Spark Mllib】决策树,随机森林——预测森林植被类型 - 简书Spark入门实战系列--8.Spark MLlib(下...
尚硅谷大数据技术之scala.docx
07-11
综上所述,尚硅谷大数据技术之scala.docx是一份关于Scala编程语言在大数据领域中应用的文档,通过学习这份文档,读者可以系统地了解Scala基础知识和应用,并将其应用于大数据处理和分析中。 ### 回答2: 尚硅谷...

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 100天精通Python丨基础知识篇 —— 01、C站最全Python标准库总结 510026
  • 耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备) 408227
  • 给你的Linux把把脉(内存、磁盘、CPU、网络) 363806
  • ❤️爆肝3万字,最硬核丨Mysql 知识体系、命令全集 【建议收藏 】❤️ 362889
  • 目录导航《100天精通Python丨快速入门到黑科技》 208173

分类专栏

  • 100天精通Python - 快速入门到黑科技 付费 21篇
  • 面试知识集锦 付费 6篇
  • 用AI比赛助手降维打击数学建模 2篇
  • 数据仓库集锦 16篇
  • Python 快速入门 30篇
  • SQL面试题库 122篇
  • 800个Python小知识 68篇
  • 大数据集锦 39篇
  • 科技情报站 12篇
  • 新星计划-写作指导课 2篇
  • SQL-每日一题 57篇
  • Python 30篇
  • 前端 7篇
  • 大数据 16篇
  • kudu 2篇
  • mysql 13篇
  • linux 10篇
  • Hive 6篇

最新评论

  • 数据分析实战:从0到1完成数据获取分析到可视化

    川川菜鸟: 真方便啊

  • 用AI比赛助手降维打击数学建模,比赛过程详细介绍,这保研不就稳了吗

    LeoToJavaer: 你的文章给我带来了很大的启示和思考,写得非常棒,期待你更多的作品。

  • 数据分析实战:从0到1完成数据获取分析到可视化

    AI+Maynor: 表情包表情包这篇关于数据分析实战的博客太棒了!从数据获取到分析再到可视化,讲解详细且实用,让人受益匪浅。表情包

  • 数据分析实战:从0到1完成数据获取分析到可视化

    不吃西红柿丶: 一起加油

  • 【建议带走】10个经典的GPT 提示词,助力玩转AI

    fanstuck: 【建议带走】10个经典的GPT 提示词,助力玩转AI大佬的文章让我对这领域的技术问题有了更深入的了解,尤其是大佬提到的那些“坑点”,我相信能够在实际应用中避免或解决很多问题。谢谢大佬的分享,期待大佬的更多精彩文章,让我们共同学习、进步。~表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 数据分析实战:从0到1完成数据获取分析到可视化
  • 用AI比赛助手降维打击数学建模,比赛过程详细介绍,这保研不就稳了吗
  • 如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!
2024年11篇
2023年229篇
2022年23篇
2021年159篇
2020年29篇
2019年23篇

目录

目录

评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃西红柿丶

感谢鼓励,我必持续稳定输出!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

PHP网站源码淮北网页设计报价宜春外贸网站制作报价成都百度seo推荐思茅SEO按天收费福永设计网站报价苏州推广网站价格汕尾seo报价泸州网站开发公司南联网站开发海南关键词排名价格德州网站优化按天计费推荐阿坝SEO按天计费哪家好南澳SEO按效果付费价格郑州推广网站报价观澜至尊标王哪家好宁德关键词按天扣费临汾百姓网标王来宾百度网站优化哪家好陇南网站关键词优化推荐德州网页制作报价淮北网站定制报价果洛建站公司张北设计网站报价宝鸡网络广告推广价格铜川外贸网站建设迪庆网站定制公司布吉阿里店铺运营常州设计网站报价许昌百度关键词包年推广哪家好成都网站推广系统多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化