
Spark权威指南
文章平均质量分 68
翻译书籍《Spark:The definitive guide》
Just Jump
勿忘来时路上的脚印。站在巨人的肩膀上。
你没有比别人更努力,更不会比别人更不努力。你只是按照你能做到的、最适合你自己的办法去实现自己的目标,去成长为你眼中优秀的人们中的一员。
你自己、优秀的人群;决心、视野;自律、标准。
业精于勤,行成于思。
古之成大事者,不惟有超世之才,亦必有坚韧不拔之志。
苟有恒,何必三更起五更眠;最无益,只怕一日曝十日寒。 十五年只做一个行当。
展开
-
Scala使用ALS模型做推荐
1、代码import org.apache.spark.sql.SparkSessionimport toby.gao.config.modelConfig/** * scala - recommendation 推荐系统 * package : org.apache.spark.ml.recommendation * 方法: ALS 、 ALSModel 交替最小二乘法 */object example28 { def main(args: Array[String]):原创 2021-08-05 17:47:21 · 1069 阅读 · 0 评论 -
使用scala做机器学习模型主要步骤示例
本文介绍使用scala做机器学习模型的一个主要步骤示例。这里主要列了些基本环节,可以在此基础上进行扩充。object mlExample { def main(args: Array[String]): Unit = { val spark = SparkSession.builder() .appName("TobyGao") .enableHiveSupport() .getOrCreate() val modelPath = "/user/原创 2021-08-04 22:30:58 · 2015 阅读 · 0 评论 -
使用Scala做特征工程常用方法
1、为后面的代码示例准备下数据 val modelPath = "/user/gaoToby/model_saved" val dataPath = "/user/gaoToby/ml_data" //1-1 load data // in Scala val sales = spark.read.format("csv") .option("header", "true") .option("inferSchema", "true")原创 2021-08-04 21:04:38 · 929 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(上篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139018397这篇主要讲 重载overload 、封装Encapsulation。也是工程化的设计思想的产物。1 类(Class)、对象(Object)和构造器(Constructor)1.1 案例要求设计一个矩形的面积计算器,输入为矩形的高(height)和宽(width),输出为矩形的面积(area)。1.2 代码对JAVA的语法有最基本的...转载 2021-07-02 17:08:23 · 294 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139033198这篇主要讲的是继承extends和覆盖override。不管是继承、覆盖还是多态,甚至类、抽象类、接口,都是在体现一种工程化实现的设计思想。如果能从做工程、多方协作的设计师的视角去看待这些概念,你会更容易理解为什么要创造出来这些概念,为什么用这些概念或方法就能达到工程代码的易扩展、易维护的目的。1 继承(Inheritance)1....转载 2021-07-02 17:04:28 · 212 阅读 · 0 评论 -
【转】JAVA基础:一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(下篇)
写在前面:转载自:知乎 飞爱学习作者:一个敲代码的汽车人原文链接:https://zhuanlan.zhihu.com/p/139388786我觉得对于多态、抽象、接口、覆盖的案例讲解很是生动、详细和透彻了。必须强推!原作者是个人才!1 抽象(Abstrac)1.1 案例咱们再加一点难度。现在要求设计一个面积计算器,计算的对象包括平行四边形、梯形和圆。平行四边形的输入为高和宽,梯形的输入为高、上底长和下底长,圆的输入为直径(假定都是规范的数值输入),所有的输出均为面积。...转载 2021-07-02 16:09:36 · 263 阅读 · 0 评论 -
10、Scala特质trait
特质 (Traits) 用于在类 (Class)之间共享程序接口 (Interface)和字段 (Fields)。 它们类似于Java 8的接口。 类和对象 (Objects)可以扩展特质,但是特质不能被实例化,因此特质没有参数。翻译 2021-06-11 19:44:38 · 213 阅读 · 0 评论 -
Scala类的单继承/多继承/private关键字问题
本文我们聊聊Scala类的单继承/多继承、private/public关键字问题。1、Scala的类是单继承的,但特质可以多继承1.1 首先,来看下多继承、单继承是什么意思,区别是什么?多继承:A类、B类是两个没有继承关系的类,C类即继承了A类又继承了B类。单继承:C类继承了B类,B类继承了A类,C、B、A是单一依次继承的关系。1.2 多继承相比于单继承有什么问题?为什么Scala采用单继承,而不是多继承?举一个多重继承的例子。蝙蝠即有鸟类的一些特征,又有哺乳动物类的一些原创 2021-07-01 16:07:20 · 2165 阅读 · 1 评论 -
Scala使用mapPartitions来实现UDAF的功能效果
写在前面:我们之前已经介绍过如何写UDAF,也介绍过map、flatMap的区别,也使用flatMap实现了UDTF的功能效果。这篇我们介绍如何使用mapPartitions()来实现UDAF的功能效果。1、直接上代码实例看实现方法//in scalaimport org.apache.spark.sql.{DataFrame, SparkSession}import org.apache.spark.sql.functions.sumimport scala.collection.原创 2021-06-30 15:35:01 · 615 阅读 · 0 评论 -
Scala使用flatMap来实现UDTF的功能效果
写在前面:工作中发现大家经常写UDF,偶尔写UDAF,但几乎很少有人写UDTF。通常UDF、UDAF就能满足大多的工作需求了。当然有很多同事喜欢写map来代替写UDF,这是可以达到同样效果的。map的功能很强大。你会发现flatMap的功能也很强大。灵活使用它就完成可以实现写UDTF达到的效果。所以,这大概也是看同事代码的时候可以经常看到flatMap,而很少见到写UDTF的原因吧。当然还有使用mapPartition()的方法来达到UDAF同样效果的写法。我们在下一篇中介绍。直接上代码原创 2021-06-30 14:28:29 · 333 阅读 · 1 评论 -
Scala比较理解map、flatMap
写在前面:首先问几个问题,如果以下问题大家都能轻松的说明白,那么说明你对这几种方法已经熟练掌握了。如果对这些问题,你还有疑问,那么我希望通过这篇文章能让你不再有疑问。1、Scala中map、flatMap的区别是什么?2、map/flatMap 和filter/where在处理数据上的区别又是什么?3、map和UDF在处理数据上的区别是什么?map(函数)的方法是否等同于UDF?如果等同,那么UDF的优势是什么,适用场景是什么?4、flatMap() 和UDTF有什么区别? 和SQL中的..原创 2021-06-29 23:20:22 · 1569 阅读 · 5 评论 -
Scala利用Buffer写UDAF详解
1、什么情况下使用UDAF?2、怎么注册UDAF?注册后怎么调用UDAF?3、怎么写UDAF? 是class 还是 object ?3.1 首先我们看看官方的UDAF的抽象类是怎么定义的abstract class UserDefinedAggregateFunction extends Serializable { /** * A `StructType` represents data types of input arguments of this aggregate .原创 2021-06-24 20:59:18 · 701 阅读 · 0 评论 -
scala利用Buffer写UDF生成List/Array/Map数据类型
一、利用ArrayBuffer写UDF处理数据生成Array数据类型1、核心代码://导入包import scala.collection.mutable.ArrayBuffer//定义一个可变的ArrayBuffervar result = ArrayBuffer[Int]()//追加数据result += userType//转为Arrayresult.toArray2、实践代码示例://in scalapackage com.toby.gao.scala原创 2021-05-11 14:29:14 · 532 阅读 · 0 评论 -
Scala日期格式转换
1、scala中日期格式yyyyMMdd 、yyyy-MM-dd的相互转换,import java.text.SimpleDateFormatdef DateFormatTransfer(DateString:String):String ={ val format1 = new SimpleDateFormat("yyyyMMdd") //定义输入/输出日期格式 val format2 = new SimpleDateFormat("yyyy-MM-dd") //定义输入/输出日期格..原创 2021-05-06 19:14:25 · 3102 阅读 · 0 评论 -
【求解】pyspark中文编码问题怎么解决?
最近使用python-spark遇到一个无法解决的中文编码问题。查了网上的资料和解决方法,都无法使之解决。不知道哪位大佬可以帮忙指点一二?问题摘要,python使用UTF8编码,spark使用的是ascii编码,处理中文文件时遇到乱码问题。情形1、读取本地文件创建DataFrame时的中文编码问题#in pythonimport codecslocal_file = "a_local_file.csv"cate_list = []for line in open(loc原创 2021-04-19 20:52:34 · 5246 阅读 · 5 评论 -
spark 分层聚合方法rollup()实践应用
1、rollup()分层聚合方法 -实践1#in pythonfrom pyspark.sql.functions import count,min,max,avg,var_pop,stddev_pop,countDistinctdf.rollup("code")\ .agg(countDistinct("user_id").alias("user_cnt"))\ .select("code","user_cnt")\ .orderBy("code")\ .show(200)原创 2021-04-19 16:30:24 · 739 阅读 · 0 评论 -
spark 分组聚合groupBy()方法实践应用
1、groupBy()分组方法,后面跟agg()聚合方法,按照需要的聚合函数对数据进行分组聚合统计#in pythonfrom pyspark.sql.functions import count,min,max,avg,var_pop,stddev_popdf.select("code", "sku", "gmv").distinct()\ .groupBy("code")\ .agg( count("sku").alias("sku_cnt")原创 2021-04-19 15:21:36 · 9493 阅读 · 0 评论 -
【转】Spark与Pandas中DataFrame对比
转自博文:Spark与Pandas中DataFrame对比我觉得是比较详细的对比了Pandas和Spark的DataFrame的工作原理和使用方法的表格了 Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism 不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制parallelism,所有的数据和操作自动并行分布在各个集群结点上。 以处理in-memory数据的方式处理dis..转载 2021-04-14 11:55:04 · 669 阅读 · 0 评论 -
PySpark 和Pandas在机器学习和分析中的联合使用
写在前面:如何将Pyspark 和 Pandas结合起来做机器学习和常规的建模分析呢?Spark处理大数据,Pandas处理小数据。pyspark中的DataFrame是分布式的,可以用来处理大规模数据的ETL,处理后的数据collect到单机器节点上,然后交给Pandas dataframe来处理。虽然Panas是单机处理的,但胜在功能工具比较齐全和完善,处理下小数据的分析和操作还是足够的。一、基本ETL常规操作1、从Pandas DataFrame创建 Spark DataFrame原创 2021-04-13 17:39:34 · 1091 阅读 · 0 评论 -
Spark 指定分区数、文件并行读写、Spark IO读写常用处理方法
一、小文件治理 之合并分区数1、配置spark.sql.shuffle.partitions,适用场景spark.sql()合并分区spark.conf.set("spark.sql.shuffle.partitions", 5) #后面的数字是你希望的分区数这样配置后,通过spark.sql()执行后写出的数据分区数就是你要求的个数,如这里5。2、配置coalesce(n),适用场景spark写出数据到指定路径下合并分区df = spark.sql(sql_string).co..原创 2021-04-13 12:14:13 · 9436 阅读 · 0 评论 -
Spark DataFrame之创建DataFrame
创建DataFrame的各种例子代码,主要是用来构造测试用例,方便快速测试方法、UDF之类。参考spark官方文档总共15个例子,每个例子分别使用了scala和python语言code,两种语言的例子是一一对应的,序号相同的就是同一个例子。包括Array、Seq数据格式存储的数据,包括稀疏向量、稠密向量的特征列,包括含有缺失值的列等,看完就再也不怕用各种奇形怪状的数据类型来创建DataFrame了。一、In Scala1、常规情况val dataset = spark.create翻译 2021-04-06 15:08:24 · 2961 阅读 · 2 评论 -
10、《Spark高阶用法之机器学习》笔记
写在前面:在本分类专栏下的1-9翻译文章,和两篇sparkUDF的文章都是属于spark的常规低阶的用法,基本能满足日常的分析功能了。但是这些基本用法并没有涉及、也无法满足机器学习建模的需求。比如拆分特征向量和目标向量,比如生成特征向量,比如使用分类或回归模型,比如使用深度学习模型等....所以,从这篇文章开始,我们开始学习spark的高阶用法,即spark用于机器学习、深度学习。注意要结合官方文档学习,里面有非常详细的API说明和代码示例,非常有助于理解和实践应用。也是日后工作时常备的原创 2021-04-05 22:48:44 · 231 阅读 · 1 评论 -
9、Spark DataFrame理解和使用之两个DataFrame复杂高级的JOIN
复杂高级type的join操作1、只要能返回布尔型结果(True/False)的判断表达式,都可以作为JOIN的关联表达式2、关联操作后的结果表中处理重复列名的三种方法3、spark做JOIN时两个表/DF的通讯机制,三种情况一、只要能返回布尔型结果(True/False)的判断表达式expr,都可以作为JOIN的关联表达式1、array_contains()函数,两个DF没有两列能使用明确的相等=条件来判断,但是能发现两列有包含的关系//in scala, 使用array_.翻译 2021-04-01 15:23:10 · 2568 阅读 · 0 评论 -
8、Spark DataFrame理解和使用之两个DataFrame的关联操作
Spark之两个DataFrame的操作注:这里只采用DF的操作语法,至于将DF创建成视图使用SQL的语法这里就不介绍了。一、创建DF备用(1)创建空的(自定义schema, 复制已有schema)(2)手工输入几条测试数据,快速构造一个测试DataFrame备用#python#手动输入几条数据,构造一个简单的测试DataFramesparkStatus = spark.createDataFrame([ (500, "Vice Presiden原创 2021-04-01 11:54:27 · 4322 阅读 · 0 评论 -
注册spark UDF实例2【入门必修第二篇,添加外部依赖文件,python】
写在前面:工作中常用的一个数据场景是这样的: 有一个很小的文件 code_file.csv,里面是一些编码及含义(如:1001,北京),还有一个待转化处理的数据集存在HIVE表中,其中一个字段code就是要利用文件code_file.csv转成对应中文含义的字段。当我们使用Spark来处理这样一个大数据集和一个小文件的时候,当然你可以把小文件导入到HIVE表中,使用JOIN函数进行转换。但既然我们要练习UDF的使用,那这里肯定是写一个UDF来解决喽。把小文件读到函数里,进行查找替换的方.原创 2021-02-09 18:33:29 · 780 阅读 · 0 评论 -
注册spark UDF实例1【入门必修第一篇,简单函数注册,scala,python】
1、注册spark-SQLUDF自定义函数。使用spark.udf.register进行UDF注册,这样注册的函数既可以在SQL中使用,也可以在DataFrame的selectExpr表达式中使用。(1)scala语言第一步,注册UDF方法1:先定义函数,再进行注册// in scala//先定义一个函数def power3(number:Double):Double = number * number * number//将函数注册成spark-sql的UDFspark.u.原创 2021-02-09 17:12:09 · 5066 阅读 · 0 评论 -
7、spark的生产应用提交脚本spark-submit
一、通过查询命令spark-submit --help 来查看提交任务时有哪些选项可以用。Options: 说明 备注 --master MASTER_URL spark://host:port, mesos://host:port, yarn, k8s://https://host:port, or local (Default: local[*]). 常用local本地模式、yarn集群模式 --deploy-mode DEPLO...翻译 2021-02-04 19:01:23 · 1333 阅读 · 0 评论 -
6、Spark聚合操作Aggregations-window、grouping set、rollup、cube
spark允许创建的分组类型有:group by, window, grouping set, rollup, cube翻译 2020-12-30 09:55:13 · 718 阅读 · 0 评论 -
5、Spark DataFrame理解和使用之不同数据类型的操作(二)
数据类型:Dates and Timestamps 日期和时间戳Handling Null 空值Complex Types 复杂类型User Defined Functions 用户自定义函数布尔型、数值型、字符型数据操作见前博文 4、Spark DataFrame理解和使用之不同数据类型的操作(一)Dates and Timestamps 日期和时间戳1、to_date()\ to_timestamp()函数to_date($date,"$date_type")函数 .翻译 2020-12-29 11:03:26 · 1015 阅读 · 0 评论 -
4、Spark DataFrame理解和使用之不同数据类型的操作(一)
数据类型:Booleans布尔型Numbers数值型Strings字符型Dates and Timestamps 日期和时间戳Handling Null 空值Complex Types 复杂类型User Defined Functions 用户自定义函数常用的处理模块有DataFrameStatFunctions(统计分析模块)和DataFrameNaFunctions(处理缺失值模块),里面包含很多相应场景中会用到的函数和方法。Column方法,包含一些跟处理列相关的方法.翻译 2020-10-24 22:31:57 · 2165 阅读 · 0 评论 -
3、Spark DataFrame理解和使用之单个DataFrame的变换操作
We can add rows or columns We can remove rows or columns We can transform a row into a column (or vice versa) We can change the order of rows based on the values in columns Creating DataFramesselect and selectExprConverting to Spar..翻译 2020-10-13 15:30:00 · 2221 阅读 · 0 评论 -
2、Spark DataFrame理解和使用之概念理解-Schemas\Columns\Rows\Spark Types
这些天突然发觉基础的东西真的还蛮重要的。尤其当理解到位了,能随心所用的时候,真的能优化代码质量,提高工作效率。我以前都不喜欢整理和记录这些很细节琐碎的事情,总是想从宏观的角度去把握和理解事情。现在也开始关注些细节。整体和细节,两手抓才能行得稳,走得长远吧。概念理解Spark中的DataFrame和Datasets是具有定义好的行、列的(分布式的)数据表。(可以具象理解成EXCEL表格)Spark中DataFrame和Datasets是不可变的、lazily懒惰执行的,只有当执行一个actio翻译 2020-10-11 12:16:46 · 1703 阅读 · 0 评论 -
1、Spark代码在集群上执行过程理解
spark代码是如何在集群上执行的?总体上可以概述为4步:写DataFrame/Dataset/SQL 代码(通过console或spark-submit提交代码) 如果代码有效,Spark将此转成逻辑计划(Logical Plan) Spark对计划中的一系列transform操作进行优化,并将逻辑计划转成物理计划(Physical Plan) Spark在集群上执行(基于RDD操作的)物理计划整体上看,提交的代码要通过 Catalyst优化器。它会决定代码执不执行,以及具体执行的物理计划翻译 2020-10-10 22:30:13 · 416 阅读 · 0 评论