
大数据处理
文章平均质量分 89
数据处理(Spark,Scala)
梁辰兴
深情不及久伴,紘爱无需多言。
展开
-
Spark SQL 内置函数
Spark SQL内置了大量的函数,位于API org.apache.spark.sql.functions中。这些函数主要分为10类:UDF函数、聚合函数、日期函数、排序函数、非聚合函数、数学函数、混杂函数、窗口函数、字符串函数、集合函数,大部分函数与Hive中相同。当Spark SQL提供的内置函数不能满足查询需求时,用户可以根据自己的业务编写自定义函数(User Defined Functions,UDF),然后在Spark SQL中调用。原创 2023-06-16 12:41:22 · 2988 阅读 · 0 评论 -
Spark SQL数据源:JDBC
Spark SQL还可以使用JDBC API从其他关系型数据库读取数据,返回的结果仍然是一个DataFrame,可以很容易地在Spark SQL中处理,或者与其他数据源进行连接查询。执行上述命令(dbtable属性的值是一个子查询,相当于SQL查询中的FROM关键字后的一部分)注意:Spark 2.4.0开始的Spark SQL的JDBC属性里才有query属性。将数据帧内容以jdbc格式写入数据库spark_db的test表。查看结果数据帧内容,执行命令:resultDF.show()原创 2023-06-14 17:04:39 · 3884 阅读 · 0 评论 -
Spark SQL数据源:Hive表
将该文件数据导入表student1中,执行命令:spark.sql(“LOAD DATA INPATH ‘hdfs://master:9000/student/input/student.txt’ INTO TABLE student1”)将数据帧数据写入hive表,执行命令:studentDf.select(“name”, “age”).write.mode(SaveMode.Overwrite).saveAsTable(“test”)这种方式不安全,不建议使用,但是可以在测试环境下暂时解决问题。原创 2023-06-14 15:38:27 · 2223 阅读 · 0 评论 -
Spark SQL数据源:JSON数据集
Spark SQL可以自动推断JSON文件的Schema,并将其加载为DataFrame。在加载和写入JSON文件时,除了可以使用load()方法和save()方法外,还可以直接使用Spark SQL内置的json()方法。该方法不仅可以读写JSON文件,还可以将Dataset[String]类型的数据集转为DataFrame。需要注意的是,要想成功地将一个JSON文件加载为DataFrame,JSON文件的每一行必须包含一个独立有效的JSON对象,而不能将一个JSON对象分散在多行。原创 2023-06-14 12:59:28 · 2680 阅读 · 0 评论 -
Spark SQL数据源:Parquet文件
Apache Parquet是Hadoop生态系统中任何项目都可以使用的列式存储格式,不受数据处理框架、数据模型和编程语言的影响。Spark SQL支持对Parquet文件的读写,并且可以自动保存源数据的Schema。当写入Parquet文件时,为了提高兼容性,所有列都会自动转换为“可为空”状态。与Protocol Buffer、Avro和Thrift一样,Parquet也支持Schema合并。原创 2023-06-14 12:36:19 · 3621 阅读 · 0 评论 -
Spark SQL数据源的基本操作
使用format()方法可以手动指定数据源。数据源需要使用完全限定名(例如org.apache.spark.sql.parquet),但对于Spark SQL的内置数据源,也可以使用它们的缩写名(JSON、Parquet、JDBC、ORC、Libsvm、CSV、Text)。通过手动指定数据源,可以将DataFrame数据集保存为不同的文件格式或者在不同的文件格式之间转换。在指定数据源的同时,可以使用option()方法向指定的数据源传递所需参数。例如,向JDBC数据源传递账号、密码等参数。原创 2023-06-13 21:03:46 · 2616 阅读 · 0 评论 -
Spark SQL数据帧与数据集
DataFrame是Spark SQL提供的一个编程抽象,与RDD类似,也是一个分布式的数据集合,但与RDD不同,DataFrame的数据都被组织到有名字的列中,就像关系型数据库中的表一样。在Spark 1.3.0版本之前,DataFrame被称为SchemaRDD。此外,多种数据都可以转化为DataFrame,例如Spark计算过程中生成的RDD、结构化数据文件、Hive中的表、外部数据库等。Dataset是一个分布式数据集,Spark 1.6中添加的一个新的API。原创 2023-06-12 12:11:46 · 1817 阅读 · 0 评论 -
Spark RDD统计每日新增用户
若同一个用户对应多个访问日期,则最小的日期为该用户的注册日期,即新增日期,其他日期为重复访问日期,不应统计在内。如下图所示,将每个用户访问的最小日期都移到第一列,第一列为有效数据,只统计第一列中每个日期的出现次数,即为对应日期的新增用户数。即2023-05-01新增了3个用户(分别为mike、alice、brown),2023-05-02新增了1个用户(green),2023-05-03新增了两个用户(分别为smith、brian)。已知有以下用户访问历史数据,第一列为用户访问网站的日期,第二列为用户名。原创 2023-06-06 22:59:42 · 878 阅读 · 0 评论 -
Spark RDD计算总分与平均分
针对成绩表,计算每个学生总分和平均分读取成绩文件,生成lines;定义二元组成绩列表;遍历lines,填充二元组成绩列表;基于二元组成绩列表创建RDD;对rdd按键归约得到rdd1,计算总分;将rdd1映射成rdd2,计算总分与平均分。执行命令:start-dfs.sh执行命令:start-all.sh在/home里创建scores.txt文件在HDFS上创建/scores/input目录,将成绩文件上传至该目录执行命令:执行命令:执行命令:执行上述代码执行命令:执行命令:执行命令:S原创 2023-06-06 12:17:11 · 2621 阅读 · 0 评论 -
在Windows上安装Scala
通常Scala安装完成后会自动将Scala的bin目录的路径添加到系统Path变量中。在命令行提示后输入scala,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序。Scala里val定义的变量相当于Java里用final定义的变量,其实都是常量,不能再给它赋值。将SCALA_HOME环境变量添加到path中,并移至顶部。3.设置安装路径(可选择默认),单击【next】按钮。2.勾选用户协议,单击【next】按钮。6.单击【finish】按钮,完成安装。1.单击【next】按钮。原创 2023-02-15 10:56:06 · 2769 阅读 · 0 评论 -
在Linux上安装Scala
在命令行提示后输入scala,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序。单击上图所示的【scala-2.13.10.tgz】超链接,将scala安装包下载到本地。注:如果没有安装jdk,请安装和配置好jdk,可参考。选择Linux所需的tgz包。演示if结构的返回值。原创 2023-02-15 11:34:53 · 2201 阅读 · 0 评论 -
Scala的简单使用
在scala>提示符之后输入:quit (或者按快捷键:Ctrl + D),退出scala交互模式。会启动后台服务常驻系统后台,这样后续再进行编译的时候,速度就可以很快。Scala可以在交互模式和编译模式两种方式下运行。文件中编写好代码,创建对象,包含入口函数。在命令行下直接敲命令或通过命令直接执行程序文件。直接在scala>提示符后敲代码执行。都可以进行编译工作,区别是。命令进行编译,产生对应的。文件中,通过编译命令将。命令来解释执行对象。原创 2023-02-22 15:59:06 · 2503 阅读 · 0 评论 -
Scala的变量声明
定义变量需要初始化,否则会报错。注意:Java里可以先声明变量,然后再赋值定义变量时可以不指定数据类型,系统会根据初始化值自动推断变量的类型。注意:Java声明变量必须指定类型。原创 2023-02-22 16:53:22 · 1249 阅读 · 0 评论 -
Scala的数据类型
在Scala中,所有的值都有一个类型,包括数值和函数。原创 2023-02-24 14:15:38 · 643 阅读 · 0 评论 -
搭建Scala集成开发环境
学会会搭建Scala的IntelliJ IDEA开发环境会会在集成开发环境里创建Scala项目。原创 2023-02-22 17:43:09 · 971 阅读 · 0 评论 -
Scala的运算符
例如:3 + 2 * 5,我们期望获得的是13,但是根据Scala特点,Scala中所有运算符其实就是方法,那么按照这种说法,表达式应该等同于(3).+(2) 得到5,(5).*(5) 得到25,与我们的预期不符!如果运算符以=结尾,且运算符并非比较运算符 =、==或=,则运算符优先级等同于=,即优先级最低,例如+=、-=等;由于Scala并没有真正的运算符,运算符其实是方法的一种形式,所以此处运算符的优先级,其实就是指方法的优先级。具有最高优先级的运算符在表的顶部,那些优先低级排在底部。原创 2023-02-26 19:44:58 · 548 阅读 · 0 评论 -
Spark 下载、安装与配置
Apache Spark 是一个快速的通用集群计算系统。它提供了Java, Scala, Python ,R 四种编程语言的 API 编程接口和基于 DAG 图执行的优化引擎。它还支持一系列丰富的高级工具:处理结构化数据的 Spark SQL,用于机器学习的 MLlib,控制图、并行图操作和计算的一组算法和工具的集合 GraphX,数据流处理 Spark Streaming。原创 2023-03-29 09:09:20 · 14498 阅读 · 0 评论 -
Spark 单机版环境版的简单操作
虽然你可以在任何时候定义新的RDD,但Spark 只会惰性计算这些RDD。比如,看看例2 和例3,我们以一个文本文件定义了数据,然后把其中包含spark的行筛选出来。相反, 一旦Spark 了解了完整的转化操作链之后,它就可以只计算求结果时真正需要的数据。事实上,在行动操作first() 中,Spark 只需要扫描文件直到找到第一个匹配的行为止,而不需要读取整个文件。另一方面,行动操作会对RDD 计算出一个结果,并把结果返回到驱动器程序中,或把结果存储到外部存储系统(如HDFS)中。执行:pyspark。原创 2023-03-29 10:38:31 · 810 阅读 · 0 评论 -
使用Spark实现词频统计
执行命令:spark-submit --master spark://master:7077 --deploy-mode cluster --class net.army.rdd.WordCount --driver-memory 512m --executor-memory 1g --executor-cores 2 hdfs://master:9000/park/SparkRDDWordCount.jar。hdfs://master:9000/wc/input:单词数据的来源路径。原创 2023-04-26 14:50:33 · 5849 阅读 · 0 评论 -
搭建Spark Standalone集群
当应用程序运行时,Master会在集群中选择一个Worker进程启动一个名为DriverWrapper的子进程,该子进程即为Driver进程,所起的作用相当于YARN集群的ApplicationMaster角色,类似MapReduce程序运行时所产生的MRAppMaster进程。Spark Standalone集群使用Spark自带的资源调度框架,但一般我们把数据保存在HDFS上,用HDFS做数据持久化,所以Hadoop还是需要配置,但是可以只配置HDFS相关的,而Hadoop YARN不需要配置。原创 2023-04-19 09:31:25 · 1408 阅读 · 0 评论 -
提交Spark应用程序
提交Spark作业后,观察Spark集群管理界面,其中“Running Applications”列表表示当前Spark集群正在计算的作业,执行几秒后,刷新界面,在Completed Applications表单下,可以看到当前应用执行完毕,返回控制台查看输出信息,出现了“Pi is roughly 3.1424157120785603”,说明Pi值已经被计算完毕。除了–master参数外,spark-submit还提供了一些控制资源使用和运行时环境的参数。进入Spark安装目录。原创 2023-04-26 08:46:07 · 1813 阅读 · 0 评论 -
Spark RDD的创建
将数据集(hello, world, scala, spark, love, spark, happy)存储在三个节点上,节点一存储(hello, world),节点二存储(scala, spark, love),节点三存储(spark, happy),这样对三个节点的数据可以并行计算,并且三个节点的数据共同组成了一个RDD。在编程时,可以把RDD看作是一个数据操作的基本单位,而不必关心数据的分布式特性,Spark会自动将RDD的数据分发到集群的各个节点。不同的是,数据的来源路径不同。原创 2023-06-05 12:10:52 · 1607 阅读 · 0 评论 -
Spark RDD算子
例如,rdd1的元素以(k,v)表示,rdd2的元素以(k, w)表示,进行左外连接时将以rdd1为基准,rdd2中的k与rdd1的k相同的元素将连接到一起,生成的结果形式为(k, (v, Some(w))。例如,rdd1的元素以(k, v)表示,rdd2的元素以(k, w)表示,执行rdd1.cogroup(rdd2)生成的结果形式为(k, (Iterable, Iterable))。fullOuterJoin()算子与数据库的全外连接类似,相当于对两个RDD取并集,两个RDD的记录都会存在。原创 2023-06-05 12:09:50 · 871 阅读 · 0 评论 -
Spark RDD分区
在有些情况下,使用Spark自带的分区器满足不了特定的需求。例如,某学生有以下3科三个月的月考成绩数据。科目成绩chinese98math88english96chinese89math96english67chinese88math78english89现需要将每一科成绩单独分配到一个分区中,然后将3科成绩输出到HDFS的指定目录(每个分区对应一个结果文件),此时就需要对数据进行自定义分区。原创 2023-06-06 08:41:58 · 1620 阅读 · 0 评论 -
Spark RDD持久化机制
Spark会自动监视每个节点上的缓存使用情况,并以最近最少使用的方式从缓存中删除旧的分区数据。从上述代码可以看出,cache()方法调用了无参的persist()方法,两者的默认存储级别都为MEMORY_ONLY,但cache()方法不可更改存储级别,而persist()方法可以通过参数自定义存储级别。Spark中重要的功能之一是可以将某个RDD中的数据保存到内存或者磁盘中,每次需要对这个RDD进行算子操作时,可以直接从内存或磁盘中取出该RDD的持久化数据,而不需要从头计算才能得到这个RDD。原创 2023-06-06 10:32:52 · 907 阅读 · 0 评论 -
Spark RDD容错机制
Spark建议,在将RDD标记为检查点之前,最好将RDD持久化到内存,因为Spark会单独启动一个任务将标记为检查点的RDD的数据写入文件系统,如果RDD的数据已经持久化到了内存,将直接从内存中读取数据,然后进行写入,提高数据写入效率,否则需要重复计算一遍RDD的数据。cache()或者persist()是将数据存储于机器本地的内存或磁盘,当机器发生故障时无法进行数据恢复,而检查点是将RDD数据存储于外部的共享文件系统(例如HDFS),共享文件系统的副本机制保证了数据的可靠性。因此,广播变量是只读的。原创 2023-06-06 11:21:03 · 1574 阅读 · 0 评论