




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于SparkSQL实现广告流量检测数据探索分析知识准备教学目标知识目标了解SparkSQL框架的功能及运行过程。了解SparkSQL与Shell交互。掌握SparkSQL的可编程数据模型DataFrame的创建、查询等操作方法。教学目标技能目标能够配置SparkSQLCLI,提供SparkSQL与Shell交互环境。能够通过不同数据源创建DataFrame。能够实现DataFrame数据及行列表的查询操作。教学目标素质目标具备钻研刻苦的精神,通过学习SparkSQLCLI,能够独立完成配置SparkonHive环境。具备独立思考的学习能力,通过学习编程数据模型DataFrame,掌握多种方式创建DataFrame。具备良好的创新能力,通过学习DataFrame的查询操作,掌握探索广告流量检测数据的分析能力。思维导图项目背景数据探索分析可通过对数据的整理、清洗、可视化和统计分析等手段,发现数据中的模式、趋势和关联性,从而帮助人们理解数据背后的信息和规律,为决策提供支持和指导。为建设更高水平的平安中国,需坚持以网络安全为基础等内容的新安全格局,强化国家战略科技力量,保障新发展格局。广告数据监测公司希望通过SparkSQL技术实现广告流量检测数据探索分析,主要从数据记录数、数据缺失值和字段特征进行探索,了解广告流量检测数据的整体情况与大体质量,为后续数据预处理提供处理凭证,并且为数据挖掘分析结论有效性和准确性奠定基础。项目目标根据存储在Hive中的广告流量检测数据,使用SparkSQL中的SQL函数进行读取、查询、探索分析广告流量检测数据。目标分析读取Hive中的表并创建DataFrame对象。简单查询DataFrame数据,简单分析广告流量检测数据的记录数及缺失值等情况。利用分组查询函数,探索分析广告流量检测数据中的日流量特征。利用排序查询函数,探索分析广告流量检测数据中的IP地址的访问次数特征。利用分组查询函数,探索分析广告流量检测数据中违规流量数据特征。认识SparkSQL框架创建DataFrame对象查看DataFrame数据掌握DataFrame行列表查询操作认识SparkSQL框架SparkSQL在Spark内核(Core)基础上提供了对结构化数据的处理。所谓结构化数据,就是每条记录共用的已知的字段集合。当数据符合条件时,SparkSOL就会针对数据的读取和查询变得更加简单高效。SparkSQL简介SparkSQL是一个用于处理结构化数据的框架,可被视为一个分布式的SQL查询引擎,提供了一个抽象的可编程数据模型DataFrame。SparkSQL框架的前身是Shark框架,由于Shark需要依赖于Hive而制约了Spark各个组件的相互集成,所以Spark团队提出了SparkSQL项目。SparkSQL借鉴了Shark的优点同时摆脱了对Hive的依赖性。相对于Shark,SparkSQL在数据兼容、性能优化、组件扩展等方面更有优势。SparkSQL简介SparkSQL提供了以下三大功能,如下。SparkSQL简介具体来说,SparkSQL提供了以下三大功能,如下。SparkSQL可以从各种结构化数据源(如JSON、Hive、Parquet等)中读取数据。SparkSQL不仅支持通过spark-shell在Spark程序内使用SQL语句进行数据查询,也支持类似商业智能软件Tableau外部工具、应用程序等通过标准数据库连接器(JDBC/ODBC)连接SparkSQL进行查询。当在Spark程序内使用SparkSQL时,SparkSQL支持SQL与常规的Python/Java/Scala代码高度整合,包括连接RDD与SQL表、公开的自定义SQL函数接口等。SparkSQL简介为了实现以上的功能,SparkSQL提供了一种特殊的RDD,叫作SchemaRDD。SchemaRDD是存放Row对象的RDD,每个Row对象代表一行记录。SchemaRDD还包含记录的结构信息(即数据字段)。SchemaRDD看起来和普通的RDD很像,但是在内部,SchemaRDD可以利用结构信息更加高效地存储数据。SparkSQL简介此外,SchemaRDD还支持RDD上所没有的一些新操作,如运行SQL查询。SchemaRDD可以从外部数据源创建,也可以从查询结果或普通RDD中创建。从Spark1.3.0版本开始,SchemaRDD更名为DataFrame。SparkSQL简介SparkSQL的运行过程如图所示。SparkSQL简介DataFrame是一个分布式的Row对象的数据集合,该数据集合提供了由列组成的详细模式信息,并且DataFrame实现了RDD的绝大多数功能。SparkSQL通过SQLContext或HiveContext对象提供的方法可从外部数据源如Parquent文件、JSON文件、RDDs、Hive表等加载数据创建DataFrame。再通过DataFrame提供的API接口、DSL(领域特定语言)、spark-sql、spark-shell或ThriftJDBC/ODBCserver等方式对DataFrame数据进行查询、转换的操作,并将结果进行展现或使用save()、saveAsTable()方法将结果存储为不同格式的文件。配置SparkSQLCLIApacheHive是Hadoop上的SQL引擎,SparkSOL编译时可以包含Hive支持,也可以不包含。包含Hive支持的SparkSOL可以支持Hive表访问、UDF(用户自定义函数)、SerDe(序列化格式和反序列化格式),以及Hive查询语言。从Spark1.1版本开始,Spark增加了SparkSQLCLI和ThriftJDBC/ODBCserver功能,使得Hive的用户与熟悉SQL语句的数据库管理员更容易上手。配置SparkSQLCLI即使没有部署好与Hive的交互,SparkSQL也可以运行。若使用SparkSQLCLI的方式访问操作Hive表数据,则需要将SparkSQL连接至一个部署成功的Hive上。配置SparkSQLCLI的基本流程如图所示。配置SparkSQLCLI配置SparkSQLCLI的具体步骤如下。复制hive-site.xml文件至Spark安装目录的conf目录。将hive-site.xml复制至/usr/local/spark-3.2.1-bin-hadoop2.7/conf目录下。配置MySQL驱动,在/usr/local/spark-3.2.1-bin-hadoop2.7/conf/spark-env.sh文件中配置MySQL驱动,使用的MySQL驱动包为mysql-connector-java-8.0.21.jar,具体操作如下。配置spark-env.sh文件。进入Spark安装目录的conf目录,使用“vimspark-env.sh”命令打开spark-env.sh文件,在文件末尾添加MySQL驱动信息。配置SparkSQLCLI复制MySQL驱动包至Spark安装目录的jars目录。将MySQL驱动包复制至Spark安装目录的jars目录下。启动相应的集群与服务。启动Hadoop集群、启动MySQL服务和Hive的元数据服务。修改日志级别。将conf目录下的perties.template文件复制并重命名为perties,执行命令“vimperties”打开perties文件,修改SparkSQL运行时的日志级别,将文件中“log4j.rootCategory”的值修改为“WARN,console”。配置SparkSQLCLI启动Spark集群。切换至Spark安装目录的/sbin目录,执行命令“./start-all.sh”启动Spark集群。SparkSQL与Shell交互SparkSQL框架其实已经集成在spark-shell中,因此,启动spark-shell即可使用SparkSQL的Shell交互接口。SparkSQL查询数据时可以使用两个对象,即SQLContext和HiveContext,从Spark2.x版本开始,Spark将SQLContext和HiveContext进行整合,提供一种全新的编程接口——SparkSession。SparkSQL与Shell交互SparkSession也称为上下文,是与SparkSQL交互的主要入口点,用于处理与SQL相关的任务。SparkSession封装了之前版本的SparkConf、SparkContext和SQLContext,提供了许多方便的方法来简化Spark编程。而SparkContext是SparkCore的上下文,是整个Spark应用程序的基础,负责与集群管理器通信以及执行RDD操作。SparkSQL与Shell交互如果在spark-shell中执行SQL语句,那么需要使用SparkSession对象调用sql()方法。在spark-shell启动的过程中会初始化SparkSession对象为spark,此时初始化的spark对象既支持SQL语法解析器,也支持HQL语法解析器,也就是使用spark可以执行SQL语句和HQL语句。SparkSQL与Shell交互读者也可以自己声明SQLContext对象,创建SQLContext对象。但通过SQLContext创建的对象只能执行SQL语句,不能执行HQL语句。使用HiveContext之前首先需要确认使用的Spark版本是支持Hive的,并且已配置SparkSQLCLI。与使用SQLContext一样,使用HiveContext之前可以先创建一个HiveContext对象。认识SparkSQL框架创建DataFrame对象查看DataFrame数据掌握DataFrame行列表查询操作创建DataFrame对象DataFrame对象可以通过结构化数据文件、外部数据库、Spark计算过程中生成的RDD、Hive中的表等数据源进行创建。虽然数据源存在多种,但创建DataFrame对象的流程是类似的,学习过程中要以辩证的思维看待问题,学会辩证统一,才能真正掌握创建DataFrame对象的方法。结构化数据源创建DataFrame一般情况下,结构化数据文件存储在HDFS中,较为常见的结构化数据文件格式是Parquet格式或JSON格式。通过结构化数据源创建DataFrame的方法如下。通过Parquet格式文件创建DataFrame。SparkSQL可以通过load()方法将HDFS上的结构化数据文件转换为DataFrame,load()方法默认导入的文件格式是Parquet。通过Parquet格式文件创建DataFrame的基本流程如下。将Parquret文件上传至HDFS。将/usr/local/spark-3.2.1-bin-hadoop2.7/examples/src/main/resources/目录下的users.parquret文件上传至HDFS的/user/root/SparkSQL目录下。结构化数据源创建DataFrame加载Parquet文件创建DataFrame。在spark-shell界面中,加载HDFS上的users.parquet文件数据并转换为DataFrame。从运行结果中可以看出,dfParquet存在name、favorite_color等3个字段。结构化数据源创建DataFrame通过JSON格式文件创建DataFrame。若加载JSON格式的文件数据转换为DataFrame,则还需要使用format()方法。通过JSON格式文件创建DataFrame的基本流程如下。将Json文件上传至HDFS。将/usr/local/spark-3.2.1-bin-hadoop2.7/examples/src/main/resources/目录下的employees.json文件上传至HDFS的/user/root/SparkSQL目录下。结构化数据源创建DataFrame加载JSON文件创建DataFrame。在spark-shell界面中,使用format()方法和load()方法加载HDFS上的employees.json文件数据并转换为DataFrame。从如图所示的运行结果中可以看出,dfJson存在name、salary两个字段。外部数据库创建DataFrameSparkSQL可以读取关系型数据库中的数据并使用SQL查询。首先需要将关系型数据库表加载成DataFrame,然后DataFrame注册成视图使用SQL查询。以MySQL数据库的表数据为例,将MySQL数据库test中的student表的数据,读者需要将“user”“password”对应的值修改为实际进入MySQL数据库时的账户名称和密码。RDD创建DataFrameSparkSQL也可以对普通RDD的数据使用SQL查询。RDD是弹性分布式数据集,是Spark核心底层操作的数据类型,Spark批处理底层操作的数据类型就是RDD。RDD数据转为DataFrame有两种方式。RDD创建DataFrame第一种方式是利用反射机制推断RDD模式,再创建DataFrame,基本流程如图所示。RDD创建DataFrame利用反射机制推断RDD模式,再创建DataFrame,步骤如下。将/usr/local/spark-3.2.1-bin-hadoop2.7/examples/src/main/resources/目录下的people.txt文件上传至HDFS的/user/root/SparkSQL目录下。读取HDFS上的people.txt文件。加载成String类型的RDD。自定义Person样例类。将得到的String类型的RDD转换成Person类型的RDD。将Person类型的RDD通过隐式转换函数转换成DataFrame。RDD创建DataFrame第二种方式是采用编程指定Schema的方式,通过动态创建Schema的方式将RDD转换成DataFrame,基本流程如图所示。通过动态创建Schema的方式将RDD转换成DataFrame,步骤如下。将HDFS上的people.txt文件转换为String类型的RDD。将String类型的RDD转换成Row类型的RDD。创建列的Schema信息。将Row类型的RDD根据列的Schema信息映射为DataFrame。Hive中的表创建DataFrame使用SparkSession对象并调用sql()方法查询Hive中的表数据并转换成DataFrame,查询weather数据库中的weather_in表数据并转换成DataFrame,创建结果如图所示。认识SparkSQL框架创建DataFrame对象查看DataFrame数据掌握DataFrame行列表查询操作查看DataFrame数据DataFrame派生于RDD,因此类似于RDD,DataFrame只有在提交Action操作时才进行计算。DataFrame查看及获取数据常用的函数或方法如表所示。函数或方法描述printSchema()打印数据模式show()查看数据first()/head()/take()/takeAsList()获取collect()/collectAsList()获取所有数据查看DataFrame数据将/usr/local/spark-3.2.1-bin-hadoop2.7/examples/src/main/resources/目录下的people.txt文件上传至HDFS的/user/root/SparkSQL目录下。坚持在发展中保障和改善民生,鼓励共同奋斗创造美好生活,不断实现人民对美好生活的向往。随着人们生活质量的提高,人们开始注重享受美好生活,其中逛街、看电影等成为常见的选择。查看DataFrame数据现有一份用户对电影评分的数据ratings.csv和电影数据movie.csv,字段说明如表所示。为了更好地满足人们对电影的需求,需要对上述两份电影数据进行分析,帮助了解用户对电影的兴趣和喜好。数据文件字段名说明movie.csvmovieId电影IDtitle电影名称Genres电影类型ratings.csvuserId用户IDmovieId电影IDrating用户对电影的评分timestamp时间戳查看DataFrame数据将两份数据上传至HDFS,加载movie.csv数据创建DataFrame对象movies,加载ratings.csv数据创建DataFrame对象ratings。通过查看DataFrame数据,可以了解数据的属性及数据的格式。创建DataFrame对象后,可以去查看DataFrame数据的模式。使用printSchema函数可以查看DataFrame数据模式,打印出列的名称和类型。printSchema():打印数据模式查看DataFrame对象ratings的数据模式,查看结果。将/usr/local/spark-3.2.1-bin-hadoop2.7/examples/src/main/resources/目录下的people.txt文件上传至HDFS的/user/root/SparkSQL目录下。show():查看数据使用show()方法可以查看DataFrame数据,可输入的参数及结果说明。方法 说明show()显示前20条记录show(numRows:Int)显示numRows条记录show(truncate:Boolean)是否最多只显示20个字符,默认为trueshow(numRows:Int,truncate:Boolean)显示numRows条记录并设置过长字符串的显示格式show():查看数据使用show()方法查看DataFrame对象ratings中的数据,show()方法与show(true)方法查询的结果一样,只显示前20条记录,最多只显示20个字符。查看结果。创建DataFrame对象show()方法默认只显示前20行记录。若需要查看前n行记录则可以使用show(numRows:Int)方法,如通过“ratings.show(5)”命令查看对象ratings的前5行记录。first()/head()/take()/takeAsList():获取若干行记录获取DataFrame若干行记录除了使用show()方法之外,还可以使用first()、head()、take()、takeAsList()方法,DataFrame获取若干行记录的方法解释说明。方法 说明first()获取第一行记录head(n:Int)获取前n行记录take(n:Int)获取前n行记录takeAsList(n:Int)获取前n行数据,并以List的形式展现first()/head()/take()/takeAsList():获取若干行记录分别使用first()、head()、take()、takeAsList()方法查看对象ratings前几行数据记录。first()和head()方法的功能相同,以Row或Array[Row]的形式返回一行或多行数据。take()和takeAsList()方法则会将获得的数据返回驱动程序,为避免驱动程序发生内存溢出错误(OutofMemoryError),数据量比较大时不建议使用。first()/head()/take()/takeAsList():获取若干行记录collect()方法可以查询DataFrame中所有的数据,并返回一个Array对象,collectAsList()方法和collect()方法类似,可以查询DataFrame中所有的数据,但是返回的是List对象。分别使用collect()和collectAsList()方法即可查看ratings所有数据。认识SparkSQL框架创建DataFrame对象查看DataFrame数据掌握DataFrame行列表查询操作掌握DataFrame行列表查询操作DataFrame查询数据有两种方法,第一种是将DataFrame注册成为临时表,再通过SQL语句查询数据。在代码414中已创建了DataFrame对象dfPerson,将dfPerson注册成临时表,使用spark.sql()方法查询dfPerson中年龄大于20的用户,如代码所示,查询结果如图所示。掌握DataFrame行列表查询操作第二种方法是直接在DataFrame对象上进行查询。DataFrame提供了很多查询数据的方法,类似于SparkRDD的转换操作,DataFrame的查询操作是一个懒操作,即运行后仅仅生成一个查询计划,只有触发执行操作才会进行计算并返回结果。DataFrame常用的查询方法如表所示。方法描述where()/filter()条件查询select()/selectExpr()/col()/apply()查询指定字段的数据信息limit(n)查询前n行记录orderby()/sort()排序查询groupBy()分组查询join()联合表查询where():查询符合指定条件的数据DataFrame可以使用where(conditionExpr:string)方法查询符合指定条件的数据,参数中可以使用and或or。where()方法的返回结果仍然为DataFrame类型。查询ratings对象中电影ID为306且评分大于3的电影评分信息,使用show()方法显示前3条查询结果。filter():筛选符合条件的数据DataFrame还可以使用filter()方法筛选出符合条件的数据,filter()的使用方法和where()是一样的。使用filter()方法查询ratings对象中电影ID为306且评分大于3的电影评分信息,查询结果如图所示,结果与图所示的查询结果一致。查询指定字段的数据信息在生活中,做成一件事的方法不止一种,人生选择的路也不止一条等着大家去发现。所谓条条大路通罗马,完成目标的方法有很多,能有多一种方法的掌握,便能多一条“去罗马的路”。指定的数据信息可以通过多种方法查询,其中where()和filter()方法查询的数据包含的是所有字段的信息,但是有时用户只需要查询某些字段的值即可。DataFrame提供了查询指定字段的值的方法,如select()、selectExpr()、col()和apply()方法,用法介绍如下。select()方法:获取指定字段值select()方法根据传入的String类型字段名获取指定字段的值,并返回一个DataFrame对象。查询ratings对象中movieId和rating字段的数据,结果如图所示。selectExpr()方法:对指定字段进行特殊处理在实际业务中,可能需要对某些字段进行特殊处理,如为某个字段取别名、对某个字段的数据进行四舍五入等。DataFrame提供了selectExpr()方法,可以对某个字段指定别名进行其他处理。使用selectExpr方法查询ratings对象中movieId和rating字段信息,查询结果如图所示。col()/apply():获取一个指定字段值col()和apply()方法也可以获取DataFrame指定字段,但只能获取一个字段,并且返回的是一个Column类型的对象。分别使用col()和apply()方法查询user对象中zip字段的数据,查询结果如图所示。查询指定行数的数据limit()方法可以获取指定DataFrame数据的前n行记录,不同于take()与head()方法,limit()方法不是Action操作,因此并不会直接返回查询结果,需要结合show()方法或其他Action操作才可以显示结果。使用limit()方法查询ratings对象的前3行记录,并使用show()方法显示查询结果,查询结果如图所示。排序查询orderBy()方法是根据指定字段进行排序,默认为升序排序。若要求降序排序,orderBy()方法的参数可以使用desc("字段名称")或$"字段名称".desc,也可以在指定字段前面加“-”。使用orderBy()方法根据userId字段对ratings对象进行降序排序,查询结果如图所示。排序查询sort()方法也可以根据指定字段对数据进行排序,用法与orderBy()方法一样。使用sort()方法根据userId字段对ratings对象进行升序排序。分组查询使用groupBy()方法可以根据指定字段进行分组操作。groupBy()方法的输入参数既可以传入String类型的字段名,也可以传入Column类型的对象。使用groupBy()方法根据movieId字段对ratings对象进行分组。groupBy()方法返回的是一个GroupedData对象,GroupedData对象可调用的方法及解释说明。方法描述max(colNames:String)获取分组中指定字段或所有的数值类型字段的最大值min(colNames:String)获取分组中指定字段或所有的数值类型字段的最小值mean(colNames:String)获取分组中指定字段或所有的数值类型字段的平均值sum(colNames:String)获取分组中指定字段或所有的数值类型字段的值的和count()获取分组中的元素个数分组查询表的方法都可以用在groupBy()方法之后。根据movieId字段对ratings对象进行分组,并计算分组中的元素个数,结果如图所示。基于SparkSQL实现广告流量检测数据探索分析项目实施读取数据创建DataFrame对象简单查询DataFrame数据分组查询日流量特征排序查询IP地址的访问次数特征
探索违规流量数据特征读取数据创建DataFrame对象要想对广告流量检测数据进行探索分析,需先通过SparkSQL读取项目3保存到Hive中表的广告流量检测数据,并创建DataFrame。在知识准备中读取Hive中的表创建DataFrame已经介绍了相关的配置步骤。Hive环境准备完成后,即可从Hive中读取数据后创建DataFrame。读取数据创建DataFrame对象简单查询DataFrame数据分组查询日流量特征排序查询IP地址的访问次数特征
探索违规流量数据特征简单查询DataFrame数据基础数据探索是数据挖掘的基础工作。通过查询数据记录来了解流量检测数据的数据量。查询数据记录数通过统计数据总记录数及IP地址数量进行简单的分析,探索7天流量数据的数据量。查询数据总记录数案例的数据是7天流量数据的数据量,第一步就是需要探索7天的数据量,查询结构如图所示。查询数据记录数统计IP地址的数量在广告检测流量数据中,字段ip记录了流量数据提取的IP地址。通过统计IP地址数量,可得到ip字段的记录数与7天的总记录是否一致。统计IP地址的数量运行结果如图所示,可知IP地址的记录数与数据总记录数一致,可得IP地址不存在缺失数据。简单查询DataFrame数据查询数据缺失值数据质量分析是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础,主要任务是检查原始数据中是否存在脏数据,脏数据一般是指不符合要求,以及不能直接进行分析的数据,包括缺失值、不一致值等。本节主要通过缺失数据及冗余数据分析广告流量数据是否存在脏数据。对数据进行质量分析首先需考虑数据是否存在缺失情况,因此,对7天所有的广告检测中的流量数据进行缺失值探索,统计出各个属性的缺失率,统计各个属性的缺失结果如图所示。查询数据缺失值根据如图所示的各属性的缺失率绘制柱形图,如图所示,mac、creativeid、mobile_os、mobile_type、app_key_md5、app_name_md5、os_type、idfa、imei、android、openudid等属性的缺失率非常高。尤其是creativeid属性,高达98.39%,由于原始数据存在字符型数据,无法进行插补,后续编写程序,对部分缺失过多的属性进行删除操作。查询数据缺失值如果缺失值占数据集的较大比例,可能无法获得全面和准确的数据视图,从而影响分析结果的可靠性。缺失值的存在可能导致数据的不一致性,对数据进行观察,其中idfa、imei、android、openudid四个字段都是用于识别手机系统类型的属性,对后续建模存在较大的影响,四个字段的分析结果如表所示。在数据缺失的统计中,数据集中idfa、imei、android、openudid四个字段各自的缺失率是偏高的,若后续构建特征时需要使用识别手机系统类型的字段,可以将四个字段合并,以降低手机系统类型属性缺失率,提取有效信息。属性名称缺失率备注idfa92.19%可用于识别iOS用户imei79.83%可用于识别Android用户android80.79%可用于识别Android用户openudid84.14%可用于识别iOS用户读取数据创建DataFrame对象简单查询DataFrame数据分组查询日流量特征排序查询IP地址的访问次数特征探索违规流量数据特征分组查询日流量特征广告检测流量数据记录总共有7天,通过字段dt记录了流量数据提取的相对时间。字段的值为1~7,1表示提取的7天流量数据的第一天数据,以此类推。对每天的数据流量数进行统计,查看是否有异常现象。分组统计流量数据的运行结果如图所示,可以看出数据的日流量差异不大,说明并没有存在数据异常增加或减少的情况,数据产生的环境相对稳定。读取数据创建DataFrame对象简单查询DataFrame数据分组查询日流量特征排序查询IP地址的访问次数特征探索违规流量数据特征排序查询IP地址的访问次数特征在广告检测流量数据样本数据中,每个记录数都记录了对应的IP地址,对点击的IP进行一个简单的统计,并根据统计数进行排序,查看IP是否存在异常。如图结果所示,IP访问次数中存在异常值,存在同一个IP高频访问广告的情况,同时占据着很高的数据比例,在后续违规探索中需对ip字段进行一个估量。读取数据创建DataFrame对象简单查询DataFrame数据分组查询日流量特征排序查询IP地址的访问次数特征探索违规流量数据特征探索违规流量数据特征不同违规行为产生的数据特征不同,对虚假流量数据探索分析,将虚假流量根据违规行为进行划分,为构建特征指标提供保障。虚假流量根据违规行为划分如下:脚本刷新网页违规定期清除Cookie,刷新网页违规ADSL重新拨号后刷新网页违规脚本刷新网页违规脚本刷新网页违规是通过设定程序,使电脑按一定的规则访问目标网站。该违规方式产生的数据记录中Cookie与IP不变,且存在多条记录。例如,某用户(IP为1,Cookie为646d9cd31ae2a674d1ed6d68acc6e019)在第1天利用同一浏览器(useragent:Mozilla)多次访问某一网址(mediaid:151)上的广告(placementid:e886beb3cc63365cf71e1ae19aae60ea)。经过统计,产生了1206条Cookie和IP不变的数据记录,该用户的行为属于利用脚本刷新网页的违规行为,所产生的流量数据为虚假流量。对Cookie和IP不变的数据记录进行分组统计,探索Cookie和IP不变的数据记录统计次数。脚本刷新网页违规Cookie和IP相同的流量记录数统计结果如图所示,在7天的流量数据中,确实存在同一IP和Cookie高频点击广告的情况。正常情况下极少会有人在7天内频繁点击某广告多达100次或以上,因此在IP和Cookie不变的情况下,统计单击频数超过100次的IP和Cookie数。脚本刷新网页违规单击频数超过1000次的IP和Cookie数统计结果如图所示。7天中同一个IP和Cookie点击广告超过100的就有104个,将同一个IP和Cookie的对应记录数相加,在流量记录中占据很大比例,如果不加以识别,将会对广告主造成很大损失。定期清除Cookie,刷新网页违规同一IP和Cookie浏览数据很容易被识别出来,所以违规者往往也会通过定期清除Cookie,产生新的Cookie,制造不同Cookie的访问记录,使流量数据避免被广告主识别为虚假流量,该类的虚假流量表现为IP不变,多条不同Cookie记录。例如,某用户(IP为92)的流量记录有10000条,其中含有9000不同的Cookie,该用户的流量数据是通过定期清除Cookie,刷新网页产生的虚假流量。定期清除Cookie,刷新网页违规根据IP进行分组统计,统计每个IP对应的不同Cookie次数的分布情况,如图所示。每个IP对应的不同Cookie次数的分布情况如图所示,存在同一个IP高频访问广告的情况,同时占据着很高的数据比例,需要进行识别。ADSL重新拨号后刷新网页违规违规者利用ADSL重新拨号后刷新网页违规,在某一时间段里,多条访问记录的IP来源于同个区域,IP的前两段或前三段相同,此类行为下产生的流量数据同样为虚假流量。例如,前两段为97.200的IP共20000条,其中前三段为97.200.183的IP有5000条,前三段为97.200.72的IP有15000条。区域办公可能会导致用户IP的前两段或三段相同,但是上万条的流量记录超出了正常范围,是违规者利用ADSL重新拨号后刷新网页的违规行为。根据IP前两段进行分组统计,统计IP前两段相同的记录数的分布情况。ADSL重新拨号后刷新网页违规IP前两段相同的记录数的分布情况如图所示,IP前两段相同的流量记录上万的情况比较多,是属于虚假流量数据。ADSL重新拨号后刷新网页违规根据IP前三段进行分组统计,统计IP前三段相同的记录数的分布情况。IP前三段相同的记录数的分布情况如图所示,IP前三段相同的流量记录上万的情况也较多,与IP前两段相同一样,如果对应的记录过于庞大,那么定义为虚假流量数据。不同的违规行为产生的数据特征不同,对数据进行探索分析,合理归纳虚假流量的数据特征,为后期有针对性地对数据进行预处理,构建相应的指标提供可靠依据,可有效提高模型分类的准确率。项目总结本项目首先介绍了SparkSQL的功能及运行流程,并介绍了SparkSQLCLI的配置方法和SparkSQL与Sheel交互,接着介绍了SparkSQL的抽象的编程数据模型DataFrame,详细介绍了从结构化数据源、外部数据库、RDD及Hive中的表4种方式创建DataFrame对象,最后介绍了DataFrame数据的查看以及DataFrame的行列表查询操作。基于知识点介绍,对广告流量检测数据创建DataFrame,通过DataFrame的查询操作对广告流量检测数据进行基本数据查询、缺失数据分析以及特征字段进行探索分析。通过本项目数据探索的结果,够更好的开展后续的数据挖掘与数据建模工作。基于SparkSQL实现广告流量检测数据探索分析技能拓展+测试题技能拓展深度学习、勇于实践是增强本领的重要途径,通过多方面深度学习来不断更新知识、更新技能,进而提高个人水平。DataFrame是一种以RDD为基础的带有Schema元信息的分布式数据集。RDD其实就是分布式的元素集合。在Spark中,对数据的所有操作不外乎创建RDD、转化已有RDD以及调用RDD操作进行求值。而在背后中,Spark会自动将RDD中的数据分发到集群上,并将操作并行化执行。RDD的创建Spark提供了两种创建RDD的方式:读取外部数据集,以及在驱动器程序中对一个集合进行并行化。创建RDD最简单的方式就是将程序中一个已有的集合传给SparkContext的parallelize()方法,可以在Shell中快速创建出RDD,然后对RDD进行操作。不过,需要注意的是,除了开发原型和测试时,此方式用得并不多,原因是需要将整个数据集先放在一台机器的内存中。RDD的操作RDD支持两种操作:转换操作和行动操作。RDD的转化操作是返回一个新的RDD的操作,如map()和filter()方法,而行动操作则是向驱动器程序返回结果或将结果写入外部系统的操作,会触发实际的计算,如count()和first()方法。转换操作RDD的转换操作是返回新RDD的操作。转换出来的RDD是惰性求值的,只有在行动操作中用到RDD时才会被计算。这样的设计使得Spark可以更高效地执行计算任务,避免了不必要的计算和数据移动。假定筛选电影评论数据电影类型包含Comedy的电影,可以使用转化操作filter()。RDD的操作行动操作行动操作是第二种类型的RDD操作,会将最终求得的结果返回到驱动器程序,或写入外部存储系统中。由于行动操作需要生成实际的输出,会强制执行求值必须用到的RDD的转化操作。如想输出数据信息,需要使用两个行动操作来实现,用count()来返回计数结果,用take()来收集RDD中的一些元素,其输出结果如图所示。知识测试(1)下列关于SparkSQL框架的描述错误的是()。A.SparkSQL可以从各种结构化数据源(如JSON、Hive、Parquet等)中读取数据。B.SparkSQL提供了一种特殊的RDD,叫作DataFrame。C.SparkSQL不仅支持通过spark-shell在Spark程序内使用SQL语句进行数据查询。D.SparkSQL是一个用于处理结构化数据的框架,可被视为一个分布式的SQL查询引擎,提供了一个抽象的可编程数据模型RDD。(2)【多选题】下列关于DataFrame对象说法正确的是()。A.DataFrame可以通过结构化数据文件、外部数据库、Spark计算过程中生成的RDD、Hive中的表等数据源进行创建B.加载JSON文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全员A练习题
- 眼科三基习题库(附答案)
- 数字化医疗健康数据共享协议
- 贵州国企招聘2025纳雍县鸽子花农业有限公司招聘10人笔试参考题库附带答案详解
- 2025河南中原特钢技术(管理)人才招聘33名笔试参考题库附带答案详解
- 2025年随州国投集团公开招聘42名工作人员笔试参考题库附带答案详解
- 2025年中国检验认证集团河南公司招聘30人笔试参考题库附带答案详解
- 2025内蒙古中材科技(锡林郭勒)风电叶片有限公司招聘32人笔试参考题库附带答案详解
- 2025中储粮(海南)有限公司招聘19人笔试参考题库附带答案详解
- 初中数学跨学科教学的创新实践与路径探索
- 2025年统编版小学道德与法治四年级下册《我们的好朋友》说课课件
- 档案信息化服务试题及答案2024
- 猪场电工工作总结
- 穴位埋线治疗
- 加快推进高校“五育融合”体系建设
- 七年级数学下册 第4章 单元综合测试卷(北师陕西版 2025年春)
- 2025年人教版中考英语一轮复习:七、八、九年级各单元重点短语汇编
- 辐射安全考核(X射线探伤)题库(含答案)
- 2025年四川成都农业科技职业学院招聘工作人员16人高频重点提升(共500题)附带答案详解
- 炎症介导的气道重塑研究-洞察分析
- 2025年南网国际公司招聘笔试参考题库含答案解析
评论
0/150
提交评论