Spark小课堂Week5 Scala初探

Scala是java威力加强版。

对Java的改进

这里会结合StreamingContext.scala这个代码说明下对Java的改进方面。

  • 方便测试方式,增加了可以指定位置的作用域。
  • 成员变量声明,构造方法,get、set方法一体化。
  • []表示泛型,不是<>
class StreamingContext private[streaming] (

 sc_ : SparkContext,

 cp_ : Checkpoint,

batchDur_ : Duration

) extends Logging
  • case声明Java Bean,省掉new的操作
private[scheduler] sealed trait JobSchedulerEvent

private[scheduler] case class JobStarted(job: Job, startTime: Long) extends JobSchedulerEvent
  • 用val控制声明周期,防止他人重新构造,已将所有基本类型对象化,所以val内容是可变的
  • 提供类型推断,对于编译器可推断类型无需定义
private[streaming] val isCheckpointPresent = (cp_ != null)
  • 会自动根据分支的最后一个逻辑返回,不需要return,可以表达式来定义逻辑
private[streaming] var checkpointDir: String = {

 if (isCheckpointPresent) {

 sc.setCheckpointDir(cp_.checkpointDir)

cp_.checkpointDir

} else {

null

}

}
  • 用None替代null,由定义方来定义是否可能空指针情况,降低调用方的开发难度
private[streaming] val uiTab: Option[StreamingTab] =

if (conf.getBoolean("spark.ui.enabled", true)) {

Some(new StreamingTab(this))

} else {

None

}

作业

题目

在RDD.scala中没有sortByKey方法,为什么可以调用。

解析

Scala中有一个非常强大的隐式转换功能,可以实现方法的动态注入。

以下是范例代码。可以看到通过隐式转换方法,可以动态给Person类添加toCode这个方法。

在Spark源码中到处使用。

class Person(val name:String)
class Engineer(val name:String,val salary:Double){
def code = println("coding:" + name)
}
def toCode(p:Person){
p.code
} implicit def personToEngineer(p:Person) : Engineer= {
new Engineer(p.name,0);
}
new Person("aa").code

关于

小课堂是在公司进行内部交流的一系列主题,偏基础,但是比较零散,持续更新中。

Spark小课堂Week5 Scala初探的更多相关文章

  1. Spark小课堂Week6 启动日志详解

    Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...

  2. Spark小课堂Week7 从Spark中一个例子看面向对象设计

    Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...

  3. Spark小课堂Week4 从控制台看Spark逻辑结构

    Spark小课堂Week4 从控制台看Spark逻辑结构 层级关系: 从监控控制台,我们可以看到如下关系: 一个 Job 包含 n Stage 一个 Stage 包含 n Task Job0解决什么问 ...

  4. Spark小课堂Week3 FirstSparkApp(Dataframe开发)

    Spark小课堂Week3 FirstSparkApp(代码优化) RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lamb ...

  5. Spark小课堂Week3 FirstSparkApp(RDD开发)

    Spark小课堂Week3 FirstSparkApp 问题:Java有哪些数据结构 大致有如下几种,其中List与Map是最重要的: List Map Set Array Heap Stack Qu ...

  6. Spark小课堂Week2 Hello Streaming

    Spark小课堂Week2 Hello Streaming 我们是怎么进行数据处理的? 批量方式处理 目前最常采用的是批量方式处理,指非工作时间运行,定时或者事件触发.这种方式的好处是逻辑简单,不影响 ...

  7. Spark小课堂Week1 Hello Spark

    Spark小课堂Week1 Hello Spark 看到Spark这个词,你的第一印象是什么? 这是一朵"火花",官方的定义是Spark是一个高速的.通用的.分布式计算系统!!! ...

  8. 小课堂Week9 例外处理设计的逆袭Part2

    小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条 ...

  9. Spark新手入门——1.Scala环境准备

    主要包括以下三部分,本文为第一部分: 一. Scala环境准备 二. Hadoop集群(伪分布模式)安装 查看 三. Spark集群(standalone模式)安装 查看 因Spark任务大多由Sca ...

随机推荐

  1. cocos2d-x lua 触摸事件

    cocos2d-x lua 触摸事件 version: cocos2d-x 3.6 1.监听 function GameLayer:onEnter() local eventDispatcher = ...

  2. Server Tomcat v7.0 Server at localhost failed to start.错误可能原因之一

    故事由来: 学Servlet中,突然发现启动Tomcat时出现这个问题 故事梗概: 学习servlet尽然能碰到服务器起不来的,百思不得其解,然后我百度,我FQgoogle,找stackoverflo ...

  3. 高德地图 JavaScript API 开发系列教程(二)

    上节简单介绍高德地图JavaScript API及网页中基本地图展示.有了地图后我们可以用来做什么?有人说离我最近的超市在哪里,我怎么去?别急,这些功能我们后面都会慢慢实现.今天为大家详细讲解如何在地 ...

  4. 用Gradle 构建android程序

    前言 android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把android gralde 构建项目 ...

  5. (转)C#模拟键盘鼠标事件

    原文 1.模拟键盘事件System.Windows.Forms.SendKeys以下是   SendKeys   的一些特殊键代码表.     键   代码       BACKSPACE   {BA ...

  6. ZooKeeper(3.4.5) - 开源客户端 Curator(2.7.0) 的简单示例

    一.创建会话 1. 创建会话 package com.huey.dream.demo; import org.apache.curator.framework.CuratorFramework; im ...

  7. Ubuntu系统应用程序创建快捷方式的方法

    大家安装了最新版的Ubuntu 14.0系统之后可能觉得很不习惯,因为Ubuntu的桌面干干净净没有任何快捷方式,任务栏的图标拖不下来,右键点击程序图标也没有创建快捷方式的菜单选项: 那如何把自己经常 ...

  8. Linux 命令行技巧

    这是一个linux常见命令的列表.那些有• 标记的条目,你可以直接拷贝到终端上而不需要任何修改,因此你最好开一个终端边读边剪切&拷贝.所有的命令已在Fedora和Ubuntu下做了测试 命令 ...

  9. oracle储存过程,job,视图,触发器(记性不好,写个例子自己记)

    存储过程 create or replace procedure TestPro(Descerr out varchar2 ) is begin select * from test; excepti ...

  10. Cocos2d-x开发实例介绍特效演示

    下面我们通过一个实例介绍几个特效的使用,这个实例下图所示,下图是一个操作菜单场景,选择菜单可以进入到下图动作场景,在下图动作场景中点击Go按钮可以执行我们选择的特性动作,点击Back按钮可以返回到菜单 ...