SCALA - 技术教程文章

scala spark and dataframe example【代码】

承接上篇pyspark,这里再给一个我写的scala的例子。这个的目的是从埋点事件里统计需要的几个事件并分区域累计,kafka stream实时计算要说一下,版本特别重要,一个是spark版本(<2, 2.0, >2.0),一个是scala版本(主要是<2.11和2.11),注意匹配pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http...

Scala中ListBuffer高效遍历

package com.dt.scala.listobject ListBuffer_Internals {def main(args: Array[String]): Unit = {val list = List(1,2,3,4,5,6,7,8,9)increment(list)increment_MoreEffective(list)increment_MostEffective(list)}def increment(list :List[Int]) : List[Int] = list match {//函数建立堆栈需要消耗大量的内存case List() => List()case head :: tail => head + 1 :: increment(tail)}def increment_MoreEffective(list : List[...

Scala Resources

http://zh.scala-tour.com/#/welcome Five free books on Scalahttp://www.oschina.net/question/103999_46884 原文:http://my.oschina.net/u/553266/blog/394523

scala基础【代码】【图】

Scala的简介大数据中使用Scala编写的两大框架就是kafka和Spark1. 官方网站:https://www.scala-lang.org/2.特点1.即是面向对象编程又是编写函数编程(函数可以独立于对象独自存在,不必非要在对象中)2.和Java一样是运行在JVM之上的高级语言(.scala文件进行编译===》.class文件===》运行在JVM上)3.scala版本不兼容性(各个版本之间是不兼容的:2.11.x 2.10.x 2.9.x 各个版本之间不兼容)4.交互式命令行:可以像Python那样在Linux...

探索Scala(7)-- 字段

本文讨论一下在Scala语言里,字段(Fields)是如何实现的字段实际上是getter/setter方法在Scala里,字段是通过var或val关键字来定义的。var字段是可读写的,val字段是只读的。下面是一个简单的例子:class MyObj {var intVar = 1val strVal = "str" }反编译之后,可以得到下面的Java代码: public class MyObj {private int intVar = 1;private final String strVal = "str";public int intVar() {return intVar;}public void intV...

IDEA编写Scala代码时自动显示变量类型【图】

设置方法如下:settins -->Editor--> Code Style --> scala --Type Annotations 勾选框选部分 测试效果原文:https://www.cnblogs.com/cosmos-wong/p/11455811.html

Scalar evolution技术与i^n求和优化【代码】

Scalar evolution技术与i^n求和优化(如果不想看一开始的引例,想直接看Scalar evolution,可以直接跳过这个“引例”部分。)引例考虑\(i^3\)求和\[S=\sum_{i=1}^n{i^3} \]其C语言代码为#include <stdio.h>int main() {int n, s = 0;scanf("%d", &n);for (int i = 1; i <= n; i++) {s += i * i * i;}printf("%d\n", s);return 0; } 非常神奇的是,这个算法本身的时间复杂度是\(O(n)\)的。但是观察打开\(O3\)优化下的汇编指令可以发...

SDP(9):MongoDB-Scala - data access and modeling【代码】

MongoDB是一种文件型数据库,对数据格式没有硬性要求,所以可以实现灵活多变的数据存储和读取。MongoDB又是一种分布式数据库,与传统关系数据库不同的是,分布式数据库不支持table-join,所以在设计数据库表结构方面与关系数据库有很大的不同。分布式数据库有一套与传统观念不同的数据模式,在设计库表结构时必须从满足各种数据抽取的需要为主要目的。关系数据库设计要求遵循范式模式(normalization)库表结构,在抽取数据时再通过...

scala操作hbase案例【代码】

案例取自streaming-app项目package com.asiainfo.ocdc.streaming.toolsimport org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.conf.Configuration import org.apache.hadoop.hbase.client.{Put, Result, Get, HTable} import org.apache.hadoop.hbase.util.Bytes import scala.collection.mutableobject HbaseTool {val table = new mutable.HashMap[String,HTable]()var conf = HBaseConfiguration.create...

Scala基础之抽象【代码】

抽象类,方法,属性(不完整)Scala将一个不完整的类称之为抽象类abstract class Person { } Scala中一个方法只有声明而没有实现,那么是抽象方法// 子类重写父类的抽象方法,直接补充完整即可// 子类重写父类的完整方法,必须添加override关键字// 开发时,推荐,只要重写,都添加overrideabstract class User { def test(): Unit = { } def fun():Unit}class Child extends User { override def test(): Unit = { ...

scala移除一个数组中第一个负数后的所有负数【代码】

2016 年1月1日 王老师课堂笔记和作业笔记:王老师主要讲解了spark的发展前景,spark在未来的几十年里必将一统大数据江湖。graphx,mllib,sparkSQL(1)scala语法的基础知识,重点为函数式编程思想。(2)spark源代码查看。作业描述:移除一个数组中第一个负数后的所有负数object Except {def main(args: Array[String]) {val arr = Array(0,2,-3,1,2,3,-3,-6,-7);var flag = 1var index = 1;arr.map { e =>if(flag > 0) {if (e > 0)...

Scala与JAVA交互

Scala的一个强项在于可以很简单的于已有的Java代码交互,所有java.lang中的类都已经被自动导入了,而其他的类需要显式声明导入。来看看演示代码吧。我们希望对日期进行格式化处理,比如说用法国的格式。Java类库定义了一系列很有用的类,比如Date和DateFormat。由于Scala于Java能够进行很好的交互,我们不需要在Scala类库中实现等效的代码,而只需直接吧Java的相关类导入就可以了:import java.util.{Date, Locale}import java.tex...

Scala Tuple类型

Tuple可以作为集合存储不同类型的数据,初始化实例如下:val tuple = (1,3,3.14,"aa")val third = tuple._3Tuple 下标访问从1开始, 需要用下划线。Scala函数还可以返回Tuple类型的值,并接收,如:val (first,second,third,forth) = tuple 跟Tuple无关但是挺有意思的东西,顺便写在这里:zip方法,(拉链操作)val pa = Array(1,2,3) //> pa : Array[Int] = Array(1, 2, 3) val pb = Array("a","b", "c") //> pb :...

scala 高级十五 scala 高介函数式编程【代码】【图】

1.高阶函数主要有两种:一种是将一个函数当做另外一个函数的参数(即函数参数);另外一种是返回值是函数的函数。2.值函数,我们可以用 var或者val 定义一个参数去接收一个函数叫做值函数 ,格式为 var fun_name=funName _上图我们定了一个 add函数有两个参数,返回一个int 类型, 然后用吧定义好的add 函数传值给 fun_add var fun_add=add _ 然后用fun_add(2,7) 去调用函数3.函数的嵌套 //嵌套函数的使用在函数体再定义一个函数...

Scala学习笔记

1.在Scala中,变量或函数的类型总是写在变量或函数的名称的后面。 2.Scala并不区分基本类型和引用类型 3.定义常量用val,定义变量用var 通过val声明的只会生成getter,而var会生成setter,getter 4.java中的++ i和i ++在Scala里不起作用 5.参数化:在创建实例的同时就完成对它的“设置” 6.a*b:左操作数是方法的调用者,可以写成a.*(b) 但1:: twoThree,:: 方法的调用者是twoThree,1是方法的传入参数,可以写成twoThree.::(1) (以...

scala 构造函数执行顺序【代码】

package com.swust.learnobject Traitshunxu extends App{ trait Logger{ println("Logger") } trait FileLogger extends Logger{ println("FileLogger") } trait Closable{ println("Closeable") } class Person{ println("Constructing...") } class Student extends Person with FileLogger with Closable{ println("Constructing...") } new Student}//结果分析程序首先执行的是直接父...

《快学Scala》第十章——特质【代码】【图】

一.本章要点类可以实现任意数量的特质特质可以要求实现它们的类具备特定的字段,方法或超类和Java接口不同,Scala特质可以提供方法和字段实现当你将多个特质叠加在一起时,顺序很重要——其方法先被执行的特质排在更后面二.为什么没有多重继承  Scala和Java一样,不允许使用多重继承(如果继承的多个超类具备某些共通的方法或字段,会引起混乱,还有可能引起菱形继承问题);  Java中可以实现任意多个接口(接口中只能有抽象方法...

Scala学习之路 (一)Spark初识【图】

一、官网介绍官网地址:http://spark.apache.org/Apache Spark?是用于大规模数据处理的统一分析引擎。从右侧最后一条新闻看,Spark也用于AI人工智能spark是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark的一个主要特点是能够在内存中进...

ExecuteScalar

ExecuteScalar运行查询,并返回查询所返回的结果集中第一行的第一列或空引用(假设结果集为空).忽略其它列或行.使用 ExecuteScalar 方法从数据库中检索单个值。由于不用创建行集、查找值并关闭行集,所以产生的系统开销很小与使用 ExecuteReader方法,然后使用 SqlDataReader 返回的数据运行生成单个值所需的操作相比,此操作须要的代码较少 cmd.CommandText = "SELECT COUNT(*) FROM dbo.region"; Int32 count = (Int32) cmd.Exec...

docker中spark+scala安装配置【图】

一、scala安装首先下载scala压缩包 wget https://downloads.lightbend.com/scala/2.11.7/scala-2.11.7.tgz解压tar -zxvf scala-2.11.7.tgz移动目录mv scala-2.11.7 /usr/local/改名cd /usr/local/mv scala-2.11.7 scala配置环境变量vim /etc/profileexport SCALA_HOME=/usr/local/scalaexport PATH=$PATH:$SCALA_HOME/bin环境变量生效source /etc/profile查看scala版本scala -version分发scala到其他主机scp -r /usr/local/scala/ ...

Scala--第七天【代码】

一、内部类定义:实现一个抽象类 或者 Trait 时 可以通过内部类的方式完成 1abstractclass Cmx {2 def func: Unit3 4 }5 6 def main(args: Array[String]): Unit = {7 var cmx = new Cmx {8 override def func: Unit = {9 println("我是内部类") 10 } 11 } 12 cmx.func 13//我是内部类14 }二、特质 Trait  定义:类似于其它语言的接口  格式:trait 名称{      //抽象成员方法或属...

第88讲:Scala中使用For表达式实现map、flatMap、filter

今天我们来学习一下如何使用for表达式实现map、flatMap以及filter首先,我们来看下map。map的功能是,传入一个list,通过一个函数f,将list中的元素A变成元素B的过程。最后得到由B形成的列表。这个过程如果由for循环实现的话,如下操作:for(element <- list) yield f(element)接下来我们看下flatMap。flatMap的功能是,传入一个list,通过一个函数f,将list中的每个元素转换成一个列表,最后返回由这些列表中的所有元素构成的列表...

Scala-Unit7-Scala并发编程模型AKKA【代码】【图】

一、Akka简介  Akka时spark的底层通信框架,Hadoop的底层通信框架时rpc。  并发的程序编写很难,但是Akka解决了spark的这个问题。  Akka构建在JVM平台上,是一种高并发、分布式、并且容错的应用工具包;  Akka使用Scala语言编写,同时它提供了Scala和Java的开发接口,Akka可以开发一些高并发的程序。 二、Akka的Acor模型  A卡卡处理并发的方法基于actor模型,在基于actor的系统中,所有事物都是actor(类似于Java的万物皆...

跟我学scala(一)基础、控制结构和函数

平时使用Spark比较多,但是对于scala的学习只限于看过书、能写代码,从来没有系统的学习过。此次看《快学scala》,做读书笔记,算是从头学习一下。《快学scala》pdf书百度云地址:https://pan.baidu.com/s/1Bv-k08wffXpnkzCymnYe8w一:基础变量和常量  val age = 10; //生成一个常量,推荐使用常量,缺点不可变   var name,classId = "100"; //生成两个变量name,classid 同时赋值为100  val name,classId :String =...

Scala 深入浅出实战经典 第91讲:Akka第一个案例动手实战架构设计【图】

mapreduce机制在actor模式下的设计结构650) this.width=650;" src="/upload/getfiles/default/2022/11/12/20221112020921996.jpg" title="actor.png" />原文:http://2615187.blog.51cto.com/2605187/1693959

Scala集合笔记【代码】

Scala的集合框架类比Java提供了更多的一些方便的api,使得使用scala编程时代码变得非常精简,尤其是在Spark中,很多功能都是由scala的这些api构成的,所以,了解这些方法的使用,将更加有助于我们学习Scala和Spark: List,Map,Set的一些api的用法如下:/** * Scala 集合测试 */ def collectionTest(): Unit ={ val map =Map("red"->"红色","green"->"绿色") val colors = List("red", "green", "blue") //map函数测试 ,打印长...

Scala中class、object、case class、case object区别【代码】

/** class、object、case class、case object区别 * * class 类似Java中的class; * object Scala不能定义静态成员,用定义单例对象代之; * case class被称为样例类,是一种特殊的类,常被用于模式匹配。 * * 一、class 和 object 关系: * 1.单例对象不能带参数,类可以 * 2.对象可以和类名一样时,object被称为伴生对象,class被称为伴生类; * 3.类和伴生对象可以相互访问其私有属性,但是它们必须在一个源文件当中;...

spark scala分组取最新日期的几条记录max date【代码】

val emp = Seq((1,"Smith",-1,"2018","10","M",3000),(2,"Rose",1,"2010","20","M",4000),(1,"Williams",1,"2020","10","M",1000),(2,"Jones",2,"2005","10","F",2000),(1,"Brown",2,"2020","40","",-1),(6,"Brown",2,"2010","50","",-1))val empColumns = Seq("emp_id","name","superior_emp_id","year_joined","emp_dept_id","gender","salary")import spark.sqlContext.implicits._val empDF = emp.toDF(empColumns:_*)empDF.sh...

IDEA中使用SBT构建SCALA项目【代码】【图】

SBT(Simple Build Tool)是SCALA平台的项目构建工具,比Maven更简洁、比IVY更为灵活。 一、环境win10JDK8scala 2.11.8 下载地址sbt 0.13.17 下载地址jdk、scala、sbt环境变量设置不再累述,自行搞定二、SBT仓库设置修改配置文件 : D:\software\sbt-0.13.17\sbt\conf\sbtconfig.txt# Set the java args to high-Xmx512M-XX:MaxPermSize=256m-XX:ReservedCodeCacheSize=128m# Set the extra SBT options-Dsbt.log.format=true-Dsbt...

Scala实现乘法口诀

object Test4 { def main(args: Array[String]) { for (i <- 1 to 9; j <- 1 to 9 if (j <= i)) if (j < i) print(j + "*" + i + "=" + i * j + "\t") else if (j == i) println(j + "*" + i + "=" + i * j + "\t") }}1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=3...