设为首页收藏本站

小牛社区-大数据学习交流社区|大数据免费学习资源

 找回密码
 立即注册!

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1719|回复: 0

scala知识点(二)

[复制链接]

3205

主题

3588

帖子

1万

积分

管理员

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

积分
15121
发表于 2016-6-12 12:55:01 | 显示全部楼层 |阅读模式
Scala允许使用三个引号来进行多行字符引用:(引自
  1. val longString = """Line 1Line 2Line 3""";
复制代码
1.正则表达式:
与正则表达式相关的类是scala.util.matching.Regex类,要构造一个Regex对象,使用String类的r方法即可,如果正则表达式中包含反斜杠或引号之类的需要转义的字符,那么最好是使用原始(raw)字符串,以三个”号包围
字符匹配
  1. val apacheLogRegex ="""^([\d.]+) (\S+) (\S+) \[([\w\d:/]+\s[+\-]\d{4})\] "(.+?)" (\d{3}) ([\d\-]+) "([^"]+)" "([^"]+)".*""".rdef extractKey(line: String): (String, String, String) = {apacheLogRegex.findFirstIn(line) match {case Some(apacheLogRegex(ip, _, user, dateTime, query, status, bytes, referer, ua)) =>if (user != "\"-\"") (ip, user, query)else (null, null, null)case _ => (null, null, null)}}
复制代码
apacheLogRegex.findFirstIn(line)    // 在line中找到首个匹配apacheLogRegex的匹配项
findPrefixOf()    //方法检查某个字符串的开始部分是否能够匹配。
findAllIn()         //方法返回遍历所有匹配项的迭代器
参考来源
2.case Some() && case None
  1. def showCapital(x: Option[String]) = x match {case Some(s) => scase None => "?"}
复制代码
当你的Option里面有东西的时候,这个List的长度是1(也就some),                                                                                                                       当你的Option里没有东西的时候,它的长度是0(也就是 None)。
3.累加器和广播变量
累加器:提供了将工作节点中的值聚合到驱动器程序中的简单语法,累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数。工作节点上的任务不能访问累加器,此时来看,累加器只是一个只写变量,为了保证累加器的容错性,对于要在行动操作中使用的累加器,spark只会把每个人物对累加器的修改应用一次。
累计器的用法总结:

  • 通过在驱动程序中调用SparkContext.accumulator(initiaValue)方法,创建出存有初始值的累加器,返回org.apache.spark.Accumlator[T]对象,其中T是初始值initialValue的类型
  • spark闭包的执行器代码可以使用累加器的+=方法增加累加器的值
  • 驱动程序可以调用累加器的value属性来访问累加器的值。
广播变量:它可以让程序高效地向工作节点发送一个较大的只读值,当应用需要向所有节点发送一个很大是只读查询表是,广播变量用起来比较顺手。
广播变量的用法总结:

  • 通过对一个类型T的对象调用SparkContext。broadcast创建出一个Broadcast[T]对象。任何可序列化的类型都可以这么实现。
  • 通过查找value属性访问该对象的值
  • 变量只会被发送到各个节点一次,应作为只读值处理
  4.缓存和持久化级别
org.apache.spark.storage.StorageLevel中的持久化级别:
级别使用的空间CPU时间是否存在内存中是否存在磁盘上备注
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK中等部分部分如果数据在内存中放不下,则溢写到磁盘上
MEMORY_AND-DISK_SER部分部分如果数据在内存中放不下,则溢写到磁盘上,在内存中存放序列化后的数据
DISK_ONLY
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册!

本版积分规则

快速回复 返回顶部 返回列表