
scala
文章平均质量分 66
鸭梨山大哎
life hard take it easy
展开
-
Scala 值类型与引用类型
Scala的根类是Any,它是所有Scala类的超类。Any有两个直接子类:AnyVal和AnyRef。AnyVal是所有值类型的父类(如Int、Boolean、Double等),而AnyRef则是所有引用类型的父类(如String、List、Option等)。Scala中的所有类都继承自Any,因此所有的Scala类都具备了一些基本的方法和属性,如equals、hashCode、toString等。原创 2023-05-10 23:18:31 · 1088 阅读 · 1 评论 -
Scala class与object深入了解
在工厂方法中,将构造函数定义为私有的,是为了限制类的实例化。这样可以确保只有工厂方法可以创建类的实例,从而保证了代码的安全性和可维护性。如果我们将构造函数定义为公共的,那么外部代码就可以直接调用构造函数来创建类的实例,而不使用工厂方法。无法对创建的对象进行验证如果外部代码可以直接调用构造函数来创建类的实例,那么就无法对传入的参数进行验证。这可能导致一些错误的对象被创建,从而引发程序的错误。无法控制对象的创建如果外部代码可以直接调用构造函数来创建类的实例,那么就无法控制对象的创建。原创 2023-05-09 21:33:16 · 1775 阅读 · 2 评论 -
scala语法糖
Scala中的语法糖是一些简化代码的语法结构,使得代码更加易读、易写。在Scala中,我们可以使用函数字面量来定义一个匿名函数,例如: 在斯卡拉这个语法糖可以大大简化代码,使得函数定义更加清晰、简洁。这个语法糖可以被理解为一个类似于switch语句的结构,但是更加灵活、强大。在Scala中,类型参数的推断可以使得代码更加简洁、易读。这个语法糖可以让代码更加简洁、易读,但是需要注意隐式转换可能会带来不可预期的后果,需要谨慎使用。原创 2023-05-09 20:51:16 · 343 阅读 · 0 评论 -
柯里化入门
在 curriedAdd 中,我们使用了 Java 8 引入的函数式接口和 lambda 表达式,将一个接受两个参数的函数转换为了一个接受单个参数的函数。具体来说,柯里化的过程是将一个函数 f(x, y) 转换为一个接受参数 x 的函数 g(x),其中 g(x) 返回一个接受参数 y 的函数 h(y),最终 h(y) 返回 f(x, y) 的结果。这个过程中,也是将一个多参数函数变成了一系列函数的嵌套,每个嵌套函数都只接受一个参数,最终返回最终结果的函数。柯里化的语法可能不太直观,需要一定的学习成本。原创 2023-05-08 07:00:00 · 575 阅读 · 0 评论 -
Scala隐式参数
在这个例子中,我们定义了一个类型类Greetable,它有一个参数列表,包含一个名为greeting的String类型参数和一个名为a的类型参数。在这个例子中,我们定义了一个名为greet的函数,它有两个参数列表,第一个参数列表包含一个名为name的String类型参数,第二个参数列表包含一个名为greeting的String类型参数。在这个例子中,我们定义了一个名为greet的函数,它有两个参数列表,第一个参数列表包含一个名为name的参数,第二个参数列表包含一个名为greeting的参数。原创 2023-05-07 11:36:25 · 700 阅读 · 4 评论 -
scala构造方法入门
辅助构造方法必须调用主构造方法或其他已经定义的辅助构造方法,这是 Scala 的语法要求。当定义一个辅助构造方法时,它必须以 def 关键字开始,后面跟着构造方法的名称和参数列表。在定义辅助构造方法时,我们可以使用 this 关键字调用类的其他构造方法。如果我们要调用主构造方法,则可以使用 this 关键字并传入主构造方法所需的参数列表;如果我们要调用其他辅助构造方法,则可以使用 this 关键字并传入其他辅助构造方法所需的参数列表。原创 2023-05-07 08:06:23 · 609 阅读 · 0 评论 -
从匿名函数到函数式编程
匿名函数是一种没有名称的函数,也被称为 lambda 函数或者函数字面量。和普通函数不同,匿名函数不需要在定义时指定函数名,通常是在需要的时候直接定义和使用。匿名函数通常被用作一次性的函数,例如作为其他函数的参数或者返回值。它们可以在运行时动态地创建,从而使代码更加灵活和可读。匿名函数的语法和使用方式因编程语言而异。add = lambda x , y : x + y print(add(1 , 2)) # 输出 3。原创 2023-05-06 23:33:02 · 562 阅读 · 0 评论 -
com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject
com.alibaba.fastjson.JSONArray cannot be cast to com.alibaba.fastjson.JSONObject原因:asInstanceOf要和isInstanceOf配合使用if (arr.isInstanceOf[JSONObject]) { val jarr: JSONObject = arr.asInstanceOf[JSONObject] list.append(jarr.getString("name").原创 2021-01-20 18:41:18 · 1088 阅读 · 0 评论 -
GeoHash入门及应用
GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据编码成一个字符串应用import ch.hsr.geohash.GeoHashobject GeoTest { def main(args: Array[String]): Unit = { //对经纬度进行编码 val str: String = GeoHash.geoHashStringWithCharacterPrecision(39.916527, 116.397128, 6) println(str)原创 2021-01-20 14:05:32 · 731 阅读 · 0 评论 -
依据经纬度解析商圈scala实现
调用高德的API,需要先去高德申请一个key.import com.alibaba.fastjson.{JSON, JSONArray, JSONObject}import org.apache.commons.lang.StringUtilsimport org.apache.http.client.methods.{CloseableHttpResponse, HttpGet}import org.apache.http.impl.client.{CloseableHttpClient, Htt原创 2021-01-20 13:49:58 · 329 阅读 · 0 评论 -
sbt命令行常用命令
clean删除所有生成的文件 (在 target 目录下)。compile编译源文件(在 src/main/scala 和 src/main/java 目录下)。test编译和运行所有测试。console进入到一个包含所有编译的文件和所有依赖的 classpath 的 Scala 解析器。输入 :quit, Ctrl+D (Unix),或者 Ctrl+Z (Windows) 返回到 sbt。run <参数>*在和 sbt 所处的同一个虚拟机上执行项目...原创 2021-01-14 12:54:52 · 932 阅读 · 0 评论 -
cmd使用SBT构建scala项目
安装通过 Windows 安装包安装 ,下载msi包下一步就可以了https://www.scala-sbt.org/download.html测试案例运行一个案例helloworld新建一个文件夹,比如sbtdemo,在里面新建一个scala文件hw.scala内容如下object Hi { def main(args: Array[String]) = println("Hi!")}在该目录下启动cmd,运行sbt命令启动sbt server,执行run命令,查看结果D:\gi原创 2021-01-14 11:27:36 · 967 阅读 · 0 评论 -
scala求集合相邻元素差值的最小值
如下代码object Test extends App { val l1=ArrayBuffer(1,4,6,7,3,9) println(test(l1)) def test(arr:ArrayBuffer[Int]):Int ={ val buffer = new ArrayBuffer[Int]() //对传进来的数组进行排序 val sortedArr = arr.sortWith(_ < _) println(sortedArr)//ArrayB原创 2020-12-19 16:30:40 · 320 阅读 · 1 评论 -
java Hashset去重原理及HashMap key唯一原理
如下,set中添加重复元素是不可以的,如下php被添加了2次,但是输出的时候只有一次,那么其去重的原理是什么呢?public class Test { public static void main(String[] args) { HashSet<String> set=new HashSet<>(); set.add("hello"); set.add("html"); set.add("php");原创 2020-11-07 21:27:50 · 2146 阅读 · 0 评论 -
java matches方法
用于进行正则匹配object Test extends App { var rules = ArrayBuffer("^.*http://b2c.csair.com/ita/intl/app.*$", "^.*/B2C40/query/jaxb/direct/query.ao.*$", "^.2*/B2C40/modules/bookingnew/main/flightSelectDirect.html\\?.*$") var request="POST /B2C40/query/原创 2020-12-19 10:17:57 · 3752 阅读 · 1 评论 -
Idea2020版本设置编码格式
有些old的代码以GBK编码的,不是很合适,可以如下更改默认的编码格式,比如改为UTF-8,通用性更好原创 2020-12-17 20:09:52 · 1971 阅读 · 0 评论 -
scala case class入门
在这方面,Scala的case class提供了更加简洁和优雅的语法结构,可以更轻松地表示数据对象,并且可以自动生成访问器方法和其他常用的方法。此外,case class还会自动生成一个伴生对象,其中包含apply等方法,使得可以用类似函数调用的语法来创建类的实例,而不需要使用new关键字。但是,对于需要可变性或需要更多的自定义行为的类,普通类可能更合适。总之,Scala中的case class提供了一种简单和方便的方法来定义不可变的数据对象,并且具有许多有用的特性,可以使代码变得更加简洁和易于理解。原创 2020-12-17 20:02:26 · 1698 阅读 · 0 评论 -
scala枚举入门
object delete extends App { //枚举有个位置索引 println(WeekDayEnum.Mon.id)//0 println(WeekDayEnum.Fri.id)//4 println(WeekDayEnum.Fri)//Fri}object WeekDayEnum extends Enumeration { type WeekDayEnum = Value //Creates a fresh value, part of this enumer原创 2020-12-16 13:10:47 · 172 阅读 · 0 评论 -
练习项目之数据分类
需求依据http request字段按规则对数据进行分类比如//原始requestPOST /B2C40/query/jaxb/direct/query.ao HTTP/1.1//进行分类为RequestType(National,Query)类型//如果符合某种规则,就封装成某种类型POST /B2C40/query/jaxb/direct/query.ao HTTP/1.1: RequestType(National,Query)实现import java.utilimport原创 2020-12-15 21:03:21 · 213 阅读 · 0 评论 -
练习项目--cookie数据脱敏
需求由于cookie信息中可能带有敏感信息:用户手机号、用户身份证号(ID),对于这些敏感信息,我们在做数据处理的时候需要进行脱敏,以免暴露用户信息。使用MD5算法对用户的敏感信息进行加密比如原始cookie如下,手机号以及身份证都是未加密的,JSESSIONID=782121159357898886-112554CF44321E; sid=b5cc11e02e154ac5b0f3609332f86803; aid=8ae8768760927e280160bb348bef3e12; identi原创 2020-12-15 20:03:42 · 617 阅读 · 0 评论 -
scala 同时赋值多个变量
val Array(a, b, c) = Array(1, 2, 3) println(a) //1 println(b) //2 println(c) //3 val a,b,c = Array(1,2,3) println(a.mkString("Array(", ", ", ")"))//Array(1, 2, 3) println(b.mkString("Array(", ", ", ")")) //Array(1, 2, 3) println(c.mkString..原创 2020-12-14 13:57:37 · 1144 阅读 · 0 评论 -
scala递归
object Tmp extends App{ println(factorial(10)) println(factorial1(10,1)) def factorial(n:Int):Int ={ if(n==1 || n==0) 1 else n*factorial(n-1) } @tailrec def factorial1(n:Int, a:Int): Int ={ if(n==1 || n==0) a else factorial1(n-1,n*a)原创 2020-12-10 10:15:06 · 171 阅读 · 0 评论 -
Spark StructType 类型详解
StructType 是个case class,一般用于构建schema.因为是case class,所以使用的时候可以不用new关键字构造函数可以传入Seq,java的List,scala的Array,都是可以的~还可以用无参的构造器,因为它有一个无参的构造器.例子 private val schema: StructType = StructType(List( StructField("name", DataTypes.StringType), StructFiel.原创 2020-12-09 17:24:50 · 10020 阅读 · 0 评论 -
scala面试题简要总结
scala介绍一下scala运行在java虚拟机上scala同时支持面向对象与函数式编程scala的代码比java的代码更加精简scala目前主要应用在spark开发关于scala,你有什么想说的吗?scala可以用在哪些方面呢?同上scala懒加载问题怎么处理? 使用Lazy关键字进行懒加载操作 在一些情况中我们经常希望某些变量的初始化要延迟,并且表达式不会被重复计算。就像我们用Java实现一个懒汉式的单例。如:打开一个数据库连接。这对于程序来说,执行该操作,代价式昂贵的,原创 2020-12-08 20:30:43 · 721 阅读 · 0 评论 -
updateStateByKey算子入门案例之wordCount
概念有一个参数,是个函数,该函数有两个参数,第一个是序列类型,第二个是Option类型def updateStateByKey[S : ClassTag](updateFunc: (Seq[V], Option[S]) => Option[S]): DStream[(K, S)]updateStateByKey还有其他重载类型,上面这个属于比较简单的一种案例以nc作为测试源nc -lk mypc01 10087案例代码如下import org.apache.spark.Spar原创 2020-12-07 21:39:42 · 175 阅读 · 0 评论 -
使用redis kv数据库维护kafka主题分区的offset
首先启动生产者kafka-console-producer.sh \--broker-list mypc01:9092,mypc02:9092,mypc03:9092 \--topic petimport org.apache.commons.pool2.impl.GenericObjectPoolConfigimport org.apache.kafka.clients.consumer.ConsumerRecordimport org.apache.kafka.common.TopicPa原创 2020-12-07 20:01:44 · 347 阅读 · 0 评论 -
Hbase table CRUD操作及scala编程
Hbase shell操作1) 插入数据:put只能插入一个单元格指定 表名、行键、列名、列值、[时间戳]hbase(main):081:0> put 'ns3:emp','rk0001','base_info:name','smith'hbase(main):084:0> put 'ns3:emp','rk0001','base_info:empno','7369',19900000002) 使用scan查询数据**浏览表所有数据:已经排过序,先按rowkey,再按列族名、然后原创 2020-11-29 21:50:05 · 498 阅读 · 0 评论 -
Hbase table DDL操作及scala API操作
Hbase shell操作table建表直接创建ns3 是namespace,emp是表,base_info是列簇hbase(main):037:0> create 'ns3:emp','base_info'shell界面会有结果提示,如下,表示操作的结果创建了一个叫做emp的表=> Hbase::Table - ns3:emp使用变量 hbase(main):036:0> t = create 'ns3:employee','base_info'创建多原创 2020-11-29 18:37:40 · 544 阅读 · 0 评论 -
Hbase namespace操作入门
Hbase shell操作前提:启动zookeeper,之后要启动hbase,之后再启动hbase shellstart-hbase.shhbase shell如果不启动hbase 就启动hbase shell会报错的!ERROR: Can't get master address from ZooKeeper; znode data == null所有命令不需要分号!1) list_namespace:查询所有命名空间hbase(main):020:0> list_namesp原创 2020-11-29 14:44:38 · 1481 阅读 · 0 评论 -
scala文件写入与读取
import java.io.{File, PrintWriter}import scala.io.{BufferedSource, Source}object Test extends App { val s = List(Student(1, "liming", "f"), Student(5, "liuquan", "m")) private val writer = new PrintWriter(new File("output.txt")) for (x <- s) {原创 2020-11-28 15:17:02 · 371 阅读 · 0 评论 -
scala apply是什么
apply使得创建实例时无需new.采用该机制,创建对象就等同于调用apply方法~object Person { def apply(name: String, age: Integer, favColor: String): Person = new Person(name, age, favColor)}class Person(name: String, age: Integer, favColor: String) {def run(): Unit ={ println(s"$n原创 2020-11-27 20:21:58 · 217 阅读 · 0 评论 -
scala数组与java数组对比
java数组不是个类,scala数组是类java定义int[] a = new int[]{1, 2, 5};scala定义val a=Array(1,2,5)源码上scalafinal class Array[T](_length: Int) extends java.io.Serializable with java.lang.Cloneable { /** The length of the array */ def length: Int = throw new Erro原创 2020-11-27 19:38:47 · 504 阅读 · 0 评论 -
scala数组入门到熟悉
数组不可变数组需要注意,访问数组中的某个元素需要() 不是[ ]//创建不可变数组可以直接赋值scala> var arr1=Array(10,20,30,40)arr1: Array[Int] = Array(10, 20, 30, 40)//创建不可变数组也可以只指定数组长度,暂时不赋值scala> var arr=new Array[Int](10)arr: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)//创建一个长度1原创 2020-11-11 19:35:28 · 291 阅读 · 0 评论 -
scala type关键字用于起别名
type关键字相当于给类型起了个别名object SeqDemo extends App { //给类型String起个别名s, type s = String //定义一个s类型的变量,就相当于定义一个String类型的变量 val x: s = "apple" println(x)//apple //可以使用String类型的所以方法 println(x.equals("pear"))//false}源码中的应用比如package object scala {//原创 2020-11-25 08:51:52 · 1360 阅读 · 0 评论 -
scala隐式转换
用途隐式转换可以把一种type转换为另一种type比如case class Centimeters(value: Double) extends AnyValcase class Meters(value: Double) extends AnyValcase class Kilometers(value: Double) extends AnyValobject Demo5 extends App { //报错,因为创建的是Meters类型 ,所以规定变量类型的时候不能是Centimet原创 2020-11-24 19:58:40 · 99 阅读 · 0 评论 -
scala 隐式参数入门及应用
定义一个方法,其中包含一个隐式参数. 那么调用的时候可以不用把这个隐式参数传进去, 解释器会自己找一个用implicit定义的变量,不管这个变量名字叫啥,都会把这个变量传给方法中的隐式参数.//定义一个方法,有一个隐式参数scala> def person(implicit name : String) = nameperson: (implicit name: String)String//直接调用,出错,因为找不到隐式参数scala> person<console>:原创 2020-11-23 22:14:47 · 243 阅读 · 0 评论 -
scala从哪里寻找隐式?
scala> import scala.math._import scala.math._scala> def foo[T](t: T)(implicit integral: Integral[T]): Unit = { | println(integral) | }foo: [T](t: T)(implicit integral: scala.math.Integral[T])Unitscala> foo(0)scala.math.Numeric原创 2020-11-23 18:57:15 · 130 阅读 · 0 评论 -
scala method与function的区别
method用def定义,function用val定义 def main(args: Array[String]): Unit = { println(add(2, 3))//5 }def add(a: Int, b: Int): Int = { a + b } val add = (a: Int, b: Int) => a + b print(add(2, 3)) //5function用=>连接方法体,method用=连接方法体例子同上原创 2020-11-23 08:37:23 · 194 阅读 · 0 评论 -
scala function从入门到理解
在 Scala 中,至少有两种语法形式用于使用 定义函数。最大的区别是:是希望 (a) 让返回类型为"隐式",这意味着您不显示它,编译器推断它- 还是 (b) 显式定义函数的返回类型val add1 = (i: Int) => i + 1 // implicit return type (IRT)val add1: Int => Int = (i) => i + 1 // explicit return type (ERT)函数体可以用{}val add原创 2020-11-22 01:23:32 · 677 阅读 · 0 评论 -
scala method入门到熟悉
scala用def定义方法返回值类型可以不写,但是写了有助于后续的维护.定义语法def function_name ([parameter_list]) : [return_type] = { // function body}例子// "normal" method definitiondef add(a: Int, b: Int) = a + b// same method, but with the return type declareddef add(a: .原创 2020-11-22 00:36:04 · 186 阅读 · 0 评论