1. apply语法
FileShuffleBlockManager中定义的类ShuffleFileGroup,定义:
private class ShuffleFileGroup(val shuffleId: Int, val fileId: Int, val files: Array[File]) { ... def apply(bucketId: Int) = files(bucketId) ... }
那么当我们新建了ShuffleFileGroup对象后,
val fileGroup = new ShuffleFileGroup(shuffleId, fileId, files)
执行如下如下操作 val file = fileGroup(0),那么它自动调用ShuffleFileGroup类的apply方法,这里返回的是files这个File数组的第一个文件
Scala allows classes to define a special function named apply that is called when we treat an object as if it were a function, so head(5) is the same thing as head.apply(5). 这里head是个Array数组对象
In Scala, apply methods have some special syntactic sugar that allows us to call them without having to type them out explicitly; for example, these two lines do exactly the same thing:
val nastats = NAStatCounter.apply(17.29)
val nastats = NAStatCounter(17.29)
NAStatCounter这里是NAStatCounter类的伴生对象,在半生对象上调用apply方法,可以用于创建类对象
2.二维数组
代码来自于DiskBlockManager.scala
fill操作是产生一个长度为第一个参数的数组,同时每个元素使用第二个参数进行填充,这里第二个参数是个数组,因此这样就定义了一个二维数组
private val subDirs = Array.fill(localDirs.length)(new Array[File](subDirsPerLocalDir))
二维数组的两个维度分别用()()表示,这跟Java的二维数据a[0][0]道理一样,只不过Scala使用a(0)(0)来对于第一个元素
var subDir = subDirs(dirId)(subDirId)
3. for嵌套循环
忘记了在Spark的什么地方看到的这个语法现象,在scala终端上试了下才发现原来是嵌套循环
scala> val a1 = List(1,2,3) a1: List[Int] = List(1, 2, 3) scala> val a2 = List(4,5,6) a2: List[Int] = List(4, 5, 6)
scala> for(s1 <- a1; s2 <- a2) {println("s1=" + s1 + ",s2=" + s2)} s1=1,s2=4 s1=1,s2=5 s1=1,s2=6 s1=2,s2=4 s1=2,s2=5 s1=2,s2=6 s1=3,s2=4 s1=3,s2=5 s1=3,s2=6
可见这是个循环遍历a1和a2的操作,同时由输出结果可以看到,s1<-a1是外层循环,s2<-a2是内层循环
相关推荐
1. Scala语法基础:包括变量声明、函数定义、类和对象、模式匹配、高阶函数等。 2. Spark核心概念:理解RDD、DataFrame/Dataset,以及如何进行转换和行动操作。 3. Spark SQL:学习如何使用DataFrame API进行数据...
### 使用新版IDEA+Maven+Scala编写Spark程序的关键步骤 #### 一、理解IDEA在2017版中的变化 2017版的IntelliJ IDEA(简称IDEA)相较于之前版本,在界面设计与操作流程上进行了较大的改进与优化。对于初次接触这个...
Scala的源代码会被编译成Java字节码,从而可以在JVM上运行。Scala支持静态类型检查,这有助于在编译期间捕获错误,类似于Java、C和C++等静态类型语言。同时,Scala也吸收了现代函数式编程语言的设计特点,包括不可变...
- Scala/Java/Python/R源代码:实现Spark作业逻辑,包括数据读取、转换和写入操作。 - SQL查询:如果使用Spark SQL,可能包含创建DataFrame、执行SQL查询的代码。 - 测试用例:验证代码正确性的单元测试或集成测试。...
1. **编译器**:Scala编译器将Scala源代码转换为Java字节码,使得程序可以在JVM上运行。2.12.3版本的编译器支持最新的语言特性,并对错误报告和编译速度进行了改进。 2. **标准库**:Scala的标准库提供了大量的类和...
这样,无论你在哪个目录下,都可以通过键入`scala`或`scalac`来启动Scala的交互式Shell或者编译Scala源代码。 Spark是一个用Scala编写的分布式计算框架,它利用Scala的简洁语法和强大的功能来构建大规模数据处理...
3. **Packages(包)**:类似于Java中的包,Scala中的包用于组织源代码。通过使用包,开发者可以避免命名冲突,提高代码的组织性和可管理性。 4. **Data Structures(数据结构)**:Scala提供了一套丰富的内置数据...
1. **源代码**:项目的核心代码,使用Scala编写,可能包含了Spark Job的定义,以及数据处理逻辑。 2. **配置文件**:如`conf`目录下的配置文件,可能包含Spark的配置参数和环境变量。 3. **测试用例**:可能有单元...
这个版本的Scala对Spark开发者来说尤其重要,因为Spark是用Scala编写的,并且通常会指定一个兼容的Scala版本来确保代码的稳定性和性能。 Spark作为一个大数据处理框架,它主要由以下几个核心组件构成: 1. **Spark...
1. **语法高亮**:提供Scala源代码的色彩标记,使得代码更易读,有助于快速识别语句类型。 2. **代码补全**:在编写代码时,自动提示可能的函数、变量、类等,提高编码效率。 3. **错误检测**:实时检查代码错误,...
Scala的语法简洁,能够更好地支持函数式编程,这使得Spark的代码更加简洁、可读性强,同时也更容易编写出并发和分布式程序。 在Spark集群中,主要组件包括: 1. **Spark Core**:这是Spark的基础,提供了分布式任务...
在IT行业中,大数据处理与实时分析是至关重要的领域,而Scala、Kafka、Spark和Elasticsearch这四个组件是构建高效数据流系统的关键技术。在这个项目中,我们使用Scala编程语言,结合Spark Streaming来监听和消费...
1. **语法高亮与代码提示**:Scala插件为Scala源代码提供语法高亮显示,使代码更易于阅读。同时,它还提供了智能代码补全和错误检测,帮助开发者快速编写和修正代码。 2. **代码导航**:插件支持类、方法、变量等...
1. **语法高亮**:Scala插件为Scala源代码提供颜色编码,使得代码更易读,更容易识别不同的语法元素。 2. **代码完成**:当你在编写代码时,插件会提供智能的代码补全建议,包括类、方法、变量等,极大地减少了手动...
然后,他们可以开始学习Scala语法,创建Spark项目,并使用Maven或Sbt等构建工具管理依赖。对于初学者,了解Scala的基本概念如类、对象、特质、模式匹配、高阶函数和不可变数据结构非常重要。对于Spark开发,理解RDD...
1. **Scala编译器**:`scala-2.11.8/bin/scala`,这是一个命令行工具,用于将Scala源代码编译成JVM可以执行的字节码。 2. **Scala解释器**:`scala-2.11.8/bin/scalac`,允许用户直接在命令行运行Scala代码,进行...
资源包含《Scala编程》第3版英文版和第3版源代码,Scala编程第3版,目前是最新版,支持Scala 2.11以上。《Scala编程》是Scala语言的创始人参与编写的,涵盖的语法特性非常全面,并且作者解释了为什么这么设计,有...
在"scala: scala代码"的描述中,我们可以推测这是一个关于Scala编程语言的学习资源或者项目源代码。 1. **面向对象编程**:Scala是基于Java虚拟机(JVM)的语言,因此它兼容Java的所有类库。它支持类、对象和继承等...
通过创建SparkSession,用户可以连接到数据源,执行SQL查询,或者进行复杂的数据分析和机器学习任务。 总的来说,这个Scala 2.11.7安装包是学习大数据处理和Spark的一个良好起点,通过深入理解和实践,开发者可以...
1. **Scala编译器**:这是将Scala源代码转换为Java字节码的工具,使得Scala程序可以在Java虚拟机(JVM)上运行。它支持静态类型检查,确保代码的类型安全。 2. **Scala库**:提供了大量内置的类和模块,涵盖了基础...