
Scala
枪枪枪
见贤思齐焉,见不贤而内自省也。
君子生非异也,善假于物也。
君子博学而日参省乎己,则知明而行无过矣。
展开
-
java 不同的打包方式,获取数据库链接时一个成功一个失败
当将项目代码和依赖独立打包时,项目代码内DriverManager.getConnection(url, connectionProperties)可以正常获取数据库链接。参考链接:https://stackoverflow.com/questions/5130254/java-error-no-suitable-driver-found。不清楚为什么使用maven-shade-plugin打到一个jar包中会导致程序找不到postgresql的驱动对象。在检查并更换数据库url后发现问题并未解决。原创 2022-09-09 18:25:51 · 553 阅读 · 0 评论 -
spark dataframe 将每一列中的空字符(或其它值)替换成null
var offlineData: DataFrame = ......val offlineDataFieldName: Array[String] = offlineData.schema.names (0 until offlineDataFieldName.length).foreach(idx => { offlineData = offlineData.withColumn( offlineDataFieldName.apply(idx)原创 2022-04-27 10:50:06 · 3142 阅读 · 0 评论 -
maven scala java 混合项目编译、打包(jar包)、运行
文章目录说明java相关的插件scala相关的插件maven命令打包创建项目分别指定java和scala的source root路径编辑pom文件执行命令运行jaridea打包参考资料说明一开始用的是在idea中打包的方式,但是在更新项目结构或是更新以来后,需要手动的去修改原来的配置,不是很方便。于是查找资料看下用maven命令如何打包java相关的插件java代码编译与打包,我参考了这篇文章的内容,介绍的很详细:https://blog.youkuaiyun.com/dyq51/article/details原创 2022-02-24 15:50:22 · 8654 阅读 · 1 评论 -
spark解析复杂json,json内结构为主表嵌套多个从表,每个从表中又嵌套表,嵌套层级有的在5次以上。Array嵌套Array、每条json的字段数量不一定。。。。
这个json字符串很长,结构也很复杂,手工构造struct的话不太现实开始一开始按如下的方式对数据进行解析zip文件–》RDD–〉spark.read.json(dataRDD)–〉DataFrame通过spark.sql(…,key1.key2.key3,…)可以取到[key1.key2.key3]下的值但是这个方法有个缺点,对于Array类型的节点,只能取一次,无法循环获取Array内的所有元素于是准备借助其它json包对RDD内的jsonString进行解析,然后对Array类型.原创 2022-02-16 15:52:25 · 1112 阅读 · 0 评论 -
[scala、spark]将MYSQL中某个表内某个条件下的数据合并到一个JSON对象中进行输出
原表中的数据分为7个类别,类别字段名称为:vehicle_type;每个类别下有若干的元素,每个类别下元素个数相同,这些元素存于一列中,列名为name_en,列内的值为元素的名称;每个元素有相同的名称的属性若干,每个属性名称作为一列;现在想要将一个类别下的元素、属性收集到一个JSON中结构如下:{ "元素名称1":{ "属性名称":"属性值" }, "元素名称1":{ "属性名称":"属性值" }, "元素名称1":{ "属性名称":"属性值" }, .... }.原创 2022-01-07 18:29:38 · 1323 阅读 · 0 评论 -
spark 当dataframe中某一行的某一列存在null值时用get(i)索引触发NullPointException
这是从Dataframe中获取的一行可以看到遍历到null值时触发异常解决方法:对DataFrame使用.na.fill("")将null值替换为空字符原创 2022-01-07 14:59:56 · 910 阅读 · 0 评论 -
关于从spark dataframe中获取某列下的数据时,数据类型不唯一时的处理方式
val range_p = df.select(col(s"${x}").getField("range")).collect.apply(0).foreach(println)获取的数据样式如下[WrappedArray(0, 10000)]…[WrappedArray(0.5, 2.0)]…WrappedArray里面的数据被自动解析成了Long、Double类型我想把数据转成Float类型,于是用.getAs[mutable.WrappedArray[Float]](0)去解析其中的数据原创 2022-01-06 17:36:29 · 1566 阅读 · 0 评论 -
Spark 在一个sparksession中并行的执行多个Job
对程序中设计的DataFrame、DataSet,将其分区数修改到一个合适的值,我这里用的是:当前环境下可用的CPU核数/并行数量。使用Callable或Runable类,重写类中的call方法或run方法,将要执行的job放入call或run方法中提交。在这个情景下,采取并行的方式同时处理n(假设n=5)个文件,能够更有效的利用服务器的资源。有两个独立的job A和B可以并行执行,按spark默认的方式A和B是顺序执行的。现有一个文件名构成的列表,要对列表内的文件进行一系列的处理后将数据写入数据库。原创 2021-12-29 16:39:09 · 4546 阅读 · 3 评论 -
spark udf 出现java.lang.UnsupportedOperationException: Schema for type AnyVal is not supported
Exception in thread "main" java.lang.UnsupportedOperationException: Schema for type AnyVal is not supported at org.apache.spark.sql.catalyst.ScalaReflection$$anonfun$schemaFor$1.apply(ScalaReflection.scala:790) at org.apache.spark.sql.catalyst.ScalaRefle原创 2021-12-24 10:56:31 · 2126 阅读 · 0 评论 -
Spark SQL RDD或DataFrame 行转列、列转行
【代码】Spark SQL RDD或DataFrame 行转列、列转行。原创 2021-12-24 10:53:11 · 2304 阅读 · 0 评论 -
[Scala] Spark将RDD中某一列下的数组拆分成多列
val data: RDD[String]val data2 = data.map(x => { val y = x.split("\\|\\|", -1) y })val data3 = data2.toDF()data3.show(10)+--------------------+| value|+--------------------+|[66,................]||[81,...........原创 2021-12-21 17:09:53 · 2540 阅读 · 0 评论 -
scala for循环结合if、yield
参考资料:https://www.cnblogs.com/sunfie/p/4983841.htmlfor(x <- Seq(1,2) )yield{.....}在for 循环中应用yield后,集合中的每个元素会被保留在一个新集合中,最后返回。返回集合的类型和输入集合的类型相同嵌套for循环(三层嵌套for循环)for(rank <-Seq(5,30); regParm <-Seq(4.0,0.0001); alpha<-Seq(1.0,原创 2021-09-27 11:11:32 · 510 阅读 · 0 评论 -
scala 得到某月的天数
/** * 获取某月的天数 * * @param time * @param format */ def getDayNumForDate(time: String, format: String = "yyyy-MM-dd HH:mm:ss") = { val date = new SimpleDateFormat(format).parse(time) val calender = java.util.Calendar.getInstance() ..原创 2021-09-24 13:31:09 · 542 阅读 · 0 评论 -
scala 判断日期是一周里的第几天
/** * 得到一周里的第几天 * * println(getDateForWeekDay("2021-09-13 12:00:00","yyyy-MM-dd HH:mm:ss")) 周一 * println(getDateForWeekDay("2021-09-14 12:00:00","yyyy-MM-dd HH:mm:ss")) 周二 * println(getDateForWeekDay("2021-09-15 12:00:00","yyyy-MM-dd HH:mm原创 2021-09-24 13:30:01 · 941 阅读 · 0 评论 -
scala 借助数组实现数据序列的错位相减
object test{ def main(args: Array[String]): Unit = { println("Hello Spark") val arrayBuffer=ArrayBuffer[Int](1,2,3,5,9,12) val out = arrayBuffer.indices.map(index => { val x1 = index - 1 val x2 = index index match {原创 2021-09-24 13:26:57 · 288 阅读 · 0 评论 -
scala 获得两个日期之间的时间序列,左闭右开
/** * 给定开始日期、结束日期,得到之间的时间序列 * 左闭右开 * 最细粒度到天 * println(getBetweenDaySeq("2021-01-03","2021-01-06","yyyy-MM-dd").toList.toString()) * * @param bTime 开始日期 * @param eTime 结束日期 * @param format * @return */ def getBetweenDaySeq(b原创 2021-09-24 11:10:00 · 468 阅读 · 0 评论 -
java.math.bigdecimal cannot be cast to scala.math.bigdecimal
在scala中定义了函数Fun(a,b)用于处理hive中某几列数据,但是一直提示java.math.bigdecimal cannot be cast to scala.math.bigdecimal后来查看后发现,函数Fun中我使用的是Scala中提供的BigDecimal方法,但是Hive中数据类型是Java BigDecimal,解决方法是:将函数Fun中的操作用Java BigDecimal 中的API进行实现就可以避免这个问题。或者是将Hive中数据类型转为String,传入函数Fun中原创 2021-09-16 10:24:16 · 1253 阅读 · 0 评论 -
[Scala] 从config.properties文件中获取属性
将一些数据库连接信息、文件信息放在config.properties进行统一管理。config.properties文件我将其放置在项目的resources文件夹下.Properties文件格式说明https://www.cnblogs.com/f1194361820/p/5594813.htmlimport org.apache.spark.{SparkConf, SparkContext}import java.io.FileInputStreamimport java.net.UR原创 2021-07-22 17:03:45 · 369 阅读 · 0 评论 -
记一次编译时错误:Cannot resolve overloaded method ‘updateStateByKey‘
这个方法根据不通的传参都有对应的函数进行处理出现Cannot resolve overloaded method 'updateStateByKey'这个异常往往是传递的参数类型不符合图片里几种函数的传参要求,导致编译器找不到对应的函数去处理你的传参,这是就要检查一下自己的参数类型是否正确...原创 2021-07-13 11:41:21 · 2891 阅读 · 1 评论 -
[Scala] Actor 相关
文章目录概念简单练习三种消息发送方式的练习实现wordcount概念学习路线Actor --> Akka --> SparkActor:是消息并发模型scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制。scala是运用消息(message)的发送、接收来实现多线程的。使用scala能够更容易地实现多线程应用的开发。Java并发编程与scala Actor编程的区别Scala的actor类似于Java中的多线程编程。但是不同的是,scala的Actor提原创 2021-06-22 11:49:50 · 115 阅读 · 0 评论 -
解决scala 2.10.X 无法导入 actors的问题
import scala.actors.Actor在pom.xml中添加scala.actors依赖,然后更新<dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-actors</artifactId> <version>2.10.7</version></dependency>资料:https://s原创 2021-06-21 17:06:19 · 1050 阅读 · 0 评论 -
[Scala] 40. 泛型
隐式转换package day04class MyPredef {// implicit def fileToRichFile(file:String)=new RichFile(file)}object MyPredef { implicit def fileToRichFile(file:String)=new RichFile(file) implicit val selectGirl=(g:Girl)=> new Ordered[Girl]{ override原创 2021-06-21 16:09:44 · 124 阅读 · 0 评论 -
[Scala] 39 柯里化、隐式转换练习
package day04// implicit 隐含的// 柯里化// 定义对象之间的比较规则object ImplicitContext{ implicit object OrderingGirl extends Ordering[Girl]{ override def compare(x: Girl, y: Girl): Int = if (x.faceValue>y.faceValue) 1 else -1 }}// 声明自定义对象类class Girl(v原创 2021-06-21 11:24:16 · 126 阅读 · 0 评论