版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
统计分析竞赛网站
用户访问日志数据
——SparkIDE编程项目背景企业等市场主体是我国经济活动的主要参与者、就业机会的主要提供者、技术进步的主要推动者。在全面建设社会主义现代化国家新征程中,如何为企业培养急需的人才,是教育尤其是职业教育急需解决的重要问题,通过科学教育满足企业对人才的需求,实现国家强盛,深入实施科教兴国战略、人才强国战略、创新驱动发展战略。在大数据产业,通过组织相关竞赛对新人进行培养和考察无疑是一个很好的解决方案,竞赛的发展与大数据技术人才的培养是互相促进的,青年强,则国家强。数据竞赛通常会作为高校推进大数据相关学科建设的重要手段,以赛促学,以赛促教,而部分企业也会通过竞赛的方式挖掘优秀人才。项目背景某竞赛网站经过几年的运营,保存了众多用户对该网站的访问日志数据。为了研究用户的兴趣爱好并改善用户体验,依据用户的历史浏览记录,需要对网站用户的访问日志数据进行分析。现有一份该竞赛网站2023年5月至2024年2月期间的用户访问日志数据文件raceData.csv,数据字段说明如下。字段名称说明id序号content_id网页IDuserid用户IDsessionid会话IDdate_time访问时间page_path网址搭建Spark开发环境Spark持久化和数据分区项目实施搭建Spark开发环境下载与安装IntelliJIDEAScala插件安装与使用AI智能编程插件安装与使用
配置Spark运行环境运行Spark程序下载与安装IntelliJIDEA在官网下载IntelliJIDEA安装包(ideaIC-2022.3.3.exe)。双击IntelliJIDEA安装包,进入安装向导界面,单击“Next”按钮。弹出安装目录设置界面,设置好IntelliJIDEA的安装目录后,单击“Next”按钮。完成一系列设置后,单击“Install”按钮。下载与安装IntelliJIDEA安装完成后将询问是否重启电脑,可根据个人情况选择立即重启或稍后重启,选择“Rebootnow”表示立即重启。下载与安装IntelliJIDEA重启电脑后,双击桌面生成的IntelliJIDEA图标,或在“开始”菜单中选择“JetBrains”→“IntelliJIDEACommunityEdition2022.3.3”来启动IntelliJIDEA。第一次启动IntelliJIDEA时,系统会询问是否导入以前的设定。选择“不导入”,然后单击“OK”按钮进入下一步。下载与安装IntelliJIDEA启动IntelliJIDEA后进入欢迎界面,默认背景为黑色。可在左侧侧边栏的“Customise”选项卡中切换,选择“IntelliJLight”。在线安装Scala插件打开IntelliJIDEA,在欢迎界面左侧侧边栏选择“Plugins”选项卡。
在“Marketplace”下方搜索框中输入“Scala”并按回车键进行搜索,然后在结果中单击“Scala”右侧的“Install”按钮,等待插件安装完毕即可。在线安装Scala插件Scala插件安装完成后,单击“RestartIDE”按钮,重启IntelliJIDEA软件。离线安装Scala插件使用离线安装的方式安装Scala插件时,需要提前下载Scala插件至本地计算机中。此处使用的Scala插件为“scala-intellij-bin-2022.3.3.zip”,可从IntelliJIDEA官网下载。离线安装Scala插件的操作步骤如下:在“Plugins”选项卡,单击图标,在下拉列表中选择“InstallPluginfromDisk...”选项。在弹出的窗口中选择本地Scala插件所在路径。选择完路径后,单击“OK”按钮进行安装。单击“RestartIDE”按钮重启IntelliJIDEA软件。测试Scala插件安装了Scala插件并重启IntelliJIDEA后,即可通过创建Scala工程测试Scala插件是否安装成功。启动IntelliJIDEA,在欢迎界面左侧的侧边栏中的“Plugins”选项卡中选择“NewProject”新建项目。测试Scala插件在弹出的“NewProject”界面中将工程名称定义为“HelloWorld”,并自定义工程存放路径,“Language”为“Scala”,“BuildSystem”为“IntelliJ”,之后依次添加“JDK”和“ScalaSDK”环境。此处使用的JDK和SDK具体版本分别为1.8.0_461和2.13.16,设置完所有参数后,单击“Create”按钮,完成Scala工程创建。测试Scala插件Scala工程创建完成后,将进入IDEA主界面,在左侧导航栏可看到创建好的工程,HelloWorld工程结构如下。测试Scala插件右键单击HelloWorld工程下的src文件夹,依次选择“New”→“Package”选项,新建一个包,包名为“com.tipdm.scalaDemo”。右键单击com.tipdm.scalaDemo包,依次选择“New”→“ScalaClass”选项,在包下新建一个Scala类。测试Scala插件将Scala类的类名设置为“HelloWorld”,并将下方类别设置为“Object”,之后按回车键确认,完成Scala类(单例对象)的创建。在“HelloWorld”类中编写Scala程序进行测试。packagecom.tipdm.scalaDemoobjectHelloWorld{defmain(args:Array[String]):Unit={println("HelloWorld!")}}测试Scala插件右键单击“HelloWorld”类中空白处,在弹出的菜单中选择“Run'HelloWorld'”运行程序。若控制台能够正常打印出下图所示的结果,则证明Scala环境的配置没有问题。安装智能编程插件一般开发过程主要使用一种智能编程插件即可,用户也可根据不同需要进行切换使用。智能编程插件的安装过程与安装Scala插件类似,以在线安装通义灵码智能编程插件为例。打开IntelliJIDEA,切换至欢迎界面左侧的侧边栏中的“Plugins”选项卡。在“Marketplace”下方搜索框中输入“通义灵码”回车搜索,在结果中找到“Lingma-AlibabaCloudAlCodingAssistant”。安装智能编程插件单击“Lingma-AlibabaCloudAlCodingAssistant”右侧的“Install”按钮,将弹出的第三方隐私说明窗口,单击“Accept”接受,之后等待插件安装完毕即可。安装智能编程插件插件安装完成后,单击“RestartIDE”按钮重启IntelliJIDEA软件。TRAEAI智能编程插件的安装过程与通义灵码智能编程插件的安装过程类似,只需搜索“TRAE”并找到“TRAEAl(formerlyMarsCode):codingAssistant”进行安装即可。使用智能编程插件通义灵码和TRAEAI等智能编程插件在使用前都需要登录。在IntelliJ
IDEA中打开之前创建的“HelloWorld”项目工程,单击软件右下角的或图标,之后根据提示进行登录,登录完成后即可使用。成功登录后,在IntelliJIDEA中编写代码时将会出现灰色的提示代码。如果想要使用提示的代码,可以通过【Tab】键进行确认;如果不需要使用提示的代码,可以通过【Esc】键取消提示代码,或者直接忽略提示代码继续编写其他代码。使用智能编程插件右键单击“HelloWorld”类中空白处,在弹出的菜单中选择“通义灵码”或“TraeAI”,即可启用相应的智能编程辅助功能。以通义灵码为例,其主要智能辅助功能如下图所示。使用智能编程插件若安装了多款智能编程插件,可以根据开发程序的不同需求切换使用,已安装的插件将会在代码右侧的侧边栏生成对应插件图标,点击不同图标即可使用。以TRAEAI为例,在右侧的侧边栏使用TRAEAI智能编程插件,如右图。添加Spark开发依赖包Spark开发依赖包指的是Spark安装目录下的jars文件夹下的一系列jar包,在IntelliJIDEA中添加Spark开发依赖包的具体步骤如下。打开IntelliJIDEA,使用“Ctrl+Alt+Shift+S”组合键打开工程结构配置界面,也可以依次选择菜单栏中的“File”→“ProjectStructure”选项打开。添加Spark开发依赖包在工程结构配置界面中,选择“Libraries”选项卡,单击“+”按钮,选择“Java”选项。在弹出的窗口中找到本地Spark安装目录下的jars文件夹,之后单击“OK”按钮即可将Spark开发依赖包导入至项目工程中。编写Spark程序SparkContext是Spark应用程序的上下文和入口,任何Spark程序均是从SparkContext对象开始的。在spark-shell中SparkContext对象自动实例化为变量“sc”。在IntelliJIDEA中进行Spark应用程序开发时,需要在main()方法中手动初始化SparkContext对象,将其作为Spark应用程序的入口,并在程序结束时关闭该对象。初始化SparkContext需要使用SparkConf类,SparkConf包含Spark集群配置的各种属性参数,如程序名、运行模式等。属性参数以键值对的形式存在,一般通过“set(属性名,属性设置值)”的方法修改属性参数。SparkContext对象实例化后,即可通过实例变量进行集合转换或数据读取。计算过程中使用的转换操作和行动操作与在spark-shell环境中的一致。编写和运行Spark程序在HelloWorld工程中的com.tipdm.sparkDemo包下新建一个类型为Object的WordCount类,编写Spark程序实现单词计数。在WordCount类中,通过SparkConf实例设置程序运行模式为“local”。packagecom.tipdm.scalaDemoimportorg.apache.spark.{SparkConf,SparkContext}objectWordCount{defmain(args:Array[String]):Unit={valconf=newSparkConf().setAppName(“WordCount”)valsc=newSparkContext(conf)valcount=sc.textFile("E:\\data\\words.txt").flatMap(x=>x.split("")).map(x=>(x,1)).reduceByKey((x,y)=>x+y)count.foreach(println)}}packagecom.tipdm.scalaDemoimportorg.apache.spark.{SparkConf,SparkContext}objectWordCount{defmain(args:Array[String]):Unit={valconf=newSparkConf().setAppName(“WordCount”)
.setMaster("local")valsc=newSparkContext(conf)valcount=sc.textFile("E:\\data\\words.txt").flatMap(x=>x.split("")).map(x=>(x,1)).reduceByKey((x,y)=>x+y)count.foreach(println)}}在开发环境中运行Spark在本地开发环境中运行Spark程序,程序中有3点需要设置:设置运行模式指定Hadoop安装包的bin文件夹的路径设置自定义输入参数设置运行模式在IntelliJIDEA中直接运行程序的关键点是设置运行模式。如果不设置运行模式,程序将找不到主节点(master)的URL,就会报出相应的错误。在程序中可通过setMaster()方法设置运行模式。也可通过设置IntelliJIDEA中的程序运行参数设置运行模式。设置运行模式在新增的“VMoptions”文本框中输入“-Dspark.master=local”,即可指定使用本地模式。设置运行模式运行模式含义local使用一个工作线程在本地模式下运行Spark(即非并行)local[n]使用n个工作线程在本地模式下运行Spark(理想情况下,将n设置为机器上的内核数)local[*]在本地模式下运行Spark,工作线程与机器上的逻辑内核一样多spark://HOST:PORT连接到指定端口的Spark独立集群上,默认为7077端口mesos://HOST:PORT连接到指定端口的Mesos集群yarn根据配置的值连接到YARN集群,使用yarn-client或yarn-cluster模式--deploy-modeclient客户端运行模式--deploy-modecluster集群运行模式
指定Hadoop安装包的bin文件夹的路径在本地运行Spark程序时,需要指定Hadoop安装包中bin文件夹的路径,即Hadoop的安装路径。可通过设置参数的方式进行设置,对应参数名是“hadoop.home.dir”。也可通过在Windows环境变量的Path变量中添加Hadoop安装包的bin文件夹路径,这样程序运行时不再需要指定对应参数。在Hadoop安装包的bin文件夹中还需要添加winutils.exe和hadoop.dll文件,可在GitHub官网上进行下载。设置自定义输入参数若程序有自定义的输入参数,则运行程序前需选择菜单栏中的“Run”→“EditConfigurations...”→“Programarguments”选项进行设置。若没有设置输入参数,则可直接运行程序。在集群环境中运行Spark直接在开发环境中运行Spark程序时,通常选择本地模式。如果数据规模庞大,通常在Spark程序编写完成后,将其编译打包为Java归档(JavaArchive,JAR)包,并通过spark-submit命令提交到Spark集群环境中运行。spark-submit的脚本在Spark安装目录的/bin目录下,spark-submit是Spark为所有支持的集群管理器提供的一个提交作业的工具。Spark在/example目录下有Scala、Java、Python和R的示例程序,都可以通过spark-submit运行。spark-submit提交JAR包到集群时有一定的格式要求,需要设置一些参数,具体如下:spark-submit--class<main-class>\--master<master-url>\--deploy-mode<deploy-mode>\--conf<"key=value">\...#otheroptions<application-jar>\[application-arguments]在集群环境中运行Spark如果只设置运行的脚本名称而不设置其他参数,则Spark程序默认在本地运行。--class:应用程序的入口,指主程序。--master:指定要连接的集群URL。--deploy-mode:指定驱动程序的部署方式,包括cluster和client两种模式。--conf:设置任意Spark配置属性,允许使用"key=value"的格式设置任意的SparkConf配置属性。application-jar:包含应用程序和所有依赖关系的JAR包的路径。application-arguments:传递给main()方法的参数。在集群环境中运行Spark更改WordCount程序,将程序运行模式更改为打包到集群中运行:packagecom.tipdm.scalaDemoimportorg.apache.spark.{SparkConf,SparkContext}
objectWordCount{defmain(args:Array[String]):Unit={valconf=newSparkConf().setAppName("WordCount")valsc=newSparkContext(conf)
//设置程序参数
valinput=args(0)valoutput=args(1)valcount=sc.textFile(input).flatMap(x=>x.split("")).map(x=>(x,1)).reduceByKey((x,y)=>x+y)count.repartition(1).saveAsTextFile(output)}}在IntelliJIDEA中打包工程(输出JAR包)在菜单栏中选择“File”→“ProjectStructure”选项,在弹出的对话框中选择“Artifacts”选项,单击“+”按钮,依次选择“JAR”→“Empty”。在IntelliJIDEA中打包工程(输出JAR包)在弹出的对话框中的“Name”文本框中设置JAR包的名称为“word”,之后双击右侧栏“HelloWorld”下的“‘HelloWorld’compileoutput”,它会转移到左侧,表示已添加工程至JAR包中。编译生成Artifact在菜单栏中依次选择“Build”→“BuildArtifacts”选项。在弹出的窗口中选择“word”→“Build”选项。编译生成Artifact生成Artifact后,在工程目录中的out目录下可以看到生成的JAR包。右键单击word.jar,在弹出的菜单中依次选择“OpenIn”→“Explorer”选项,即可打开本地JAR包路径。在集群环境中运行Spark首先启动所有虚拟机,并依次启动Hadoop集群和Spark集群。之后将Windows本地的JAR包和words.txt文件上传至Linux虚拟机中的/opt/data目录下。再将虚拟机中的/opt/data/words.txt文件上传至HDFS的/tipdm/data目录下。最后进入Spark安装目录的bin目录下,使用spark-submit提交Spark程序至集群中运行。程序运行完成后,在HDFS的Web端中即可查看单词计数结果。cd$SPARK_HOME/binspark-submit--masteryarn--deploy-modecluster\--classcom.tipdm.scalaDemo.WordCount\/opt/data/word.jar/tipdm/data/words.txt/tipdm/data/wordcount在集群环境中运行Sparkspark-submit提交程序除了常用的格式外,还包含对Spark进行性能调优的设置,通常用于修改Spark程序运行时的配置项。Spark中的主要配置机制是通过SparkConf类对Spark程序进行配置的。SparkConf实例中每个配置项都是键值对,可以通过set()方法设置。如果在程序中通过SparkConf设置了程序运行时的配置,那么在更改时需要对程序进行修改并重新打包,过程比较繁琐。Spark允许通过spark-submit工具动态设置配置项。当程序被spark-submit脚本启动时,脚本将配置项设置到运行环境中。当创建一个SparkConf实例时,这些配置项将会被检测出来并进行自动配置。在集群环境中运行Sparkspark-submit也支持从配置文件中读取配置项的值,这对一些与环境相关的配置项比较有用。默认情况下,spark-submit脚本将在Spark安装目录中找到conf/spark-default.conf文件,读取文件中以空格隔开的键值对配置项,但也可以通过spark-submit的--properties-file标记指定读取的配置文件的位置。如果存在一个配置项在系统配置文件、应用程序、spark-submit等多个地方均进行了设置的情况,那么Spark有特定的优先级选择实际的配置。优先级最高的是应用程序中set()方法设置的配置项,其次是spark-submit传递的参数,接着是写在配置文件中的值,最后是系统默认值。在集群环境中运行Sparkspark-submit为常用的Spark配置项提供了专用的标记,而对于没有专用标记的配置项,可以通过--conf接收任意Spark配置项的值。配置项描述--nameName设置程序名--jarsJARS添加依赖包--driver-memoryMEMDriver程序使用的内存大小--executor-memoryMEMExecutor使用的内存大小--total-executor-coresNUMExecutor使用的总内核数--executor-coresNUM每个Executor使用的内核数--num-executorsNUM启动的Executor数量spark.eventLog.enabled是否开启日志记录在集群环境中运行Spark配置项描述spark.eventLog.dir保存日志相关信息的路径,可以是“hdfs://”开头的HDFS路径,也可以是“file://”开头的本地路径,路径均需要提前创建spark.cores.max当应用程序运行在Standalone集群或粗粒度共享模式Mesos集群时,应用程序向整个集群请求的最大CPU内核总数。如果不设置,那么对于Standalone集群将使用spark.deploy.defaultCores指定的数值,而Mesos集群将使用集群中可用的内核在集群环境中运行Spark设置spark-submit提交单词计数程序时的环境配置和运行时所启用的资源,此处分配给每个Executor的内核数为1,内存为1GB。程序运行完成后,即可在HDFS的Web端中查看单词计数结果。spark-submit--masteryarn--deploy-modecluster\--executor-memory1G\--executor-cores1\--classcom.tipdm.scalaDemo.WordCount\/opt/data/word.jar/tipdm/data/words.txt/tipdm/data/wordcount2搭建Spark开发环境Spark持久化和数据分区项目实施设置RDD持久化(缓存)由于SparkRDD是惰性求值的,因此如果需要多次使用同一个RDD,那么调用时每次都需要计算该RDD并执行它依赖的其他转换操作。在需要多次迭代的计算中,由于常常需要多次使用同一组数据,因此计算资源消耗会非常大。为了避免多次计算同一个RDD,可以在Spark中设置数据持久化。每个RDD一般情况下是由多个分区组成的,RDD的数据分布在多个节点中,因此Spark持久化RDD数据时,由参与计算该RDD的节点各自保存所求出的分区数据。持久化RDD后,再使用该RDD时将不再需要重新计算,直接获取各节点保存好的分区数据即可。设置RDD持久化(缓存)RDD的持久化操作有cache()和persist()两种方法。每一个RDD都可以用不同的存储级别进行保存,从而允许持久化数据集在硬盘或内存中作为序列化的Java对象,甚至跨节点复制。存储级别是通过org.apache.spark.storage.StorageLevel对象确定的。cache()方法是使用默认存储级别的快捷方法,也就是StorageLevel.MEMORY_ONLY(将反序列化的对象存入内存)。如果需要将数据保存到1个副本中,那么可以通过在存储级别末尾加上“_2”,表示将数据持久化并保存为2份。设置RDD持久化(缓存)org.apache.spark.storage.StorageLevel中的常用存储级别:级别所需内存空间程度所需CPU计算时间程度是否在内存中是否在磁盘上备注MEMORY_ONLY高低是否数据仅保留在内存中MEMORY_ONLY_SER低高是否数据仅保留在内存中MEMORY_AND_DISK高中等部分部分数据先写到内存中,内存放不下则溢写到磁盘上MEMORY_AND_DISK_SER低高部分部分数据序列化后先写到内存中,内存不足则溢写到磁盘上DISK_ONLY低高否是数据仅存在磁盘上设置RDD持久化(缓存)RDD的存储级别应该根据需要以及具体情况设置,在RDD参与第一次计算后,RDD会根据设置的存储级别保存计算后的值到内存或磁盘中。只有未曾设置存储级别的RDD才能设置存储级别,已经设置了存储级别的RDD不能修改存储级别。针对将数据存储到内存中的存储策略,如果内存不足,Spark将使用最近最少使用缓存策略清除最老的分区,为新的RDD提供存储空间。因此,缓存在内存中的RDD分区数据是会被清除的,不能长久保存,而缓存在磁盘上的数据则不会被清除。若内存不足以存放所有分区数据,RDD可能无法持久化,下次操作时需重新计算未持久化的数据。如果需要人为清除已经不需要的数据,可以使用RDD提供的unpersist()方法。设置RDD持久化(缓存)例如,转化集合为RDD并赋值给变量data,对data中的每个值都进行平方运算,设置存储级别为MEMORY_ONLY,再通过RDD的数值计算方法分别求和与求均值,并输出结果。如果不持久化RDD,那么求和与求均值时都会对data重新进行平方运算,而持久化RDD后,只有在第一次输出求和结果时会计算data,在第二次输出求均值时是直接从内存中读取持久化数据的。设置数据分区SparkRDD是多个分区组成的数据集合,在分布式程序中,通信的代价是很大的,因此控制数据分区、减少网络传输是提高程序运行整体性能的重要方式。只有键值对RDD才能设置分区方式,非键值对RDD的分区方式是None。系统通过键函数分区元素,虽无法控制键的具体节点,但可确保相同特性的键同属一区。每个RDD的分区ID范围是0~(numPartitions−1),numPartitions是分区的个数。设置数据分区设置分区方式使用的是partitionBy()方法,需要传入一种分区方式作为参数。例如,对键值对RDD——kv_rdd设置分区方式,可以通过“kv_rdd.partitionBy(分区方式)”的方式完成。获取RDD的分区方式可以使用RDD的partitioner属性,该属性会返回一个scala.Option对象,可以通过调用Option对象的isDefined方法判断是否有分区方式(分区器),并用get()方法获取具体的分区方式,分区方式是一个spark.Partitioner对象。Spark的系统分区方式有两种,一种是哈希分区(HashPartitioner),根据哈希值分区;另一种是范围分区(RangePartitioner),将一定范围的数据映射到一个分区中。设置数据分区用户也可以通过自定义分区器完成特定的分区要求。实现自定义分区器,需要继承org.apache.spark.Partitioner类并实现其中的3个方法:defnumPartitions:Int:返回需要创建的分区个数。defgetPartition(key:Any):
对输入的键进行处理,并返回该键的分区ID,范围一定是0~(numPartitions−1)。equals(other:Any):Java语言中判断两个数据是否相等的方法,之所以要求用户实现equals()方法,是因为Spark内部会比较两个RDD的分区是否一样。设置数据分区例如,自定义一个分区器MyPartition,要求根据键的奇偶性将数据分布在两个分区中。packagecom.tipdm.scalaDemoimportorg.apache.spark.PartitionerclassMyPartition(numParts:Int)extendsPartitioner{overridedefnumPartitions:Int=numPartsoverridedefgetPartition(key:Any):Int={if(key.toString.toInt%2==0){return0}else{return1}}overridedefequals(other:Any):Boolean=othermatch{casemypartition:MyPartition=>mypartition.numPartitions==numPartitionscase_=>false}}设置数据分区以HDFS上的文件user.txt为例,创建一个ToDistribute类,读取user.txt数据并创建键值对RDD,将第1列的值作为键,并对RDD进行分区,设置分区方式为自定义的分区器MyPartition,并将结果保存到HDFS。packagecom.tipdm.scalaDemoimportorg.apache.spark.{SparkConf,SparkContext}
objectToDistribute{defmain(args:Array[String]):Unit={valconf=newSparkConf().setAppName("PartitionTest")valsc=newSparkContext(conf)valinput=args(0)valoutput=args(1)valdata=sc.textFile(input).map{x=>valy=x.split(",");(y(0),y(1))}valdata2=data.partitionBy(newMyPartition(2))data2.saveAsTextFile(output)}}设置数据分区对HelloWorld项目工程进行重新编译,选择菜单栏中的“Build”→“BuildArtifacts”选项,再单击“Rebuild”重新编译工程,生成新的JAR包word.jar。将此JAR包上传至Linux虚拟机中的/opt/data目录下,之后进入Spark安装目录的bin目录下,使用spark-submit提交Spark程序至集群中运行。cd$SPARK_HOME/binspark-submit--masterspark://master:7077\--executor-memory512M--executor-cores1\--classcom.tipdm.scalaDemo.ToDistribute\/opt/data/word.jar/tipdm/data/user.txt/tipdm/data/part1设置数据分区运行后的生成的结果文件如下:程序运行完成后,在HDFS的Web端中查看分区结果,由于设置了两个分区,所以RDD的数据会存储在两个文件中。根据分区设置,part-00000文件存储的是偶数键的数据,奇数键的数据被存储在part-00001文件中。设置数据分区自定义分区器可以控制数据的分区个数、每个分区中数据的内容。在存储数据时,数据按照分区器的设置保存在不同的文件中。由于RDD的分区存储特性,如果不自定义分区方法,或数据不是键值对RDD,那么数据可能会分布在几个分区中,最终结果也会被存储在几个文件中,不利于对所有数据结果的查看。RDD中还有两种可以在不使用自定义分区器的情况下对任何类型RDD进行简单重分区的方法,分别是coalesce()方法和repartition()方法。设置数据分区coalesce(numPartitions:Int,shuffle:Boolean=false)方法使用哈希分区方式对RDD进行重分区。该方法支持输入两个参数:第一个参数为重分区的数目,第二个参数为是否进行shuffle,默认为false。当shuffle为false时,重设分区个数只能比RDD原有分区数小。如果要重设的分区个数大于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 永宁县2025年四上数学阶段模拟试题(含答案)
- 2025-2026月考试卷八年级数学上学期期中模拟卷02(人教版)(原卷版)
- 宋应星的工艺百科《天工开物》解析
- 2026年中秋节服装活动策划方案
- 2026年销售 推销 营销案例分析
- 2026年冬季消防安全活动方案
- 2026年社区年前工作安排部署方案
- 2026年保安春节安全应急预案及措施
- 2026年社区活动创意方案设计
- 2026年用火用电安全检查安全隐患排查
- 24.3 数据的四分位数 导学案
- 2026年托福口语测试题及答案
- 2026中国临时晶圆键合材料市场现状调查及未来趋势专项咨询报告
- 骨科患者呼吸功能锻炼指导
- 2026年甘肃兰州市地理生物会考考试真题及答案
- 2026年甘肃高考物理题库试题附答案
- (三调)武汉市2026届高中毕业生三月调研考试英语试卷(含标准答案)
- 2025-2026学年三年级语文下册第四单元综合素养评价卷(含答案)
- 纪检干部个人现实表现材料-范本模板
- 2025年成人高考高起专广西壮族自治区数学(文科)真题试卷及答案
- 我国微生物肥料产业化发展:现状、挑战与突破路径研究
评论
0/150
提交评论