rdd

大数据技术Spark之Spark Core(三)

混江龙づ霸主 提交于 2020-01-18 23:38:40
大数据技术Spark之Spark Core(三) 一:action reduce(func) :作用: 通过 func 函数聚集 RDD 中的所有元素,先聚合分区内数据,再聚合分区间数据。 collect():作用: 在驱动程序中,以数组的形式返回数据集的所有元素。 count():作用: 返回 RDD 中元素的个数 first():作用:返回RDD中的第一个元素 take(n):作用:返回一个由RDD的n个元素组成的数组 takeOrdered(n):作用:返回改RDD排序后的前n个元素组成的数组 aggregate:作用: aggregate 函数将每个分区里面的元素通过 seqOp 和初始值进行聚合,然后用 combine 函数将每个分区的结果和初始值(zeroValue)进行 combine 操作。这个函数最终返回 的类型不需要和 RDD 中元素类型一致。 fold(num)(func): 作用: 折叠操作, aggregate 的简化操作, seqop 和 combop 一样 saveAsTextFile(path):作用: 将数据集的元素以 textfile 的形式保存到 HDFS 文件系统或者其他支持的文件系统,对于每个元素, Spark 将会调用 toString 方法,将它装换为文件中的文本。 saveAsSequenceFile(path):作用:

RDD和DataFrame的区别

我的梦境 提交于 2020-01-18 04:58:58
spark3.0版本可能不太公布底层的RDD,以后使用dataframe将成为趋势,现在大都数公司也多使用dataframe来处理数据 RDD、DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同。 RDD和DF的区别 上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。DataFrame多了数据的结构信息,即schema。RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化,比如filter下推、裁剪等。 提升执行效率 RDD API是函数式的,强调不变性,在大部分场景下倾向于创建新对象而不是修改老对象。这一特点虽然带来了干净整洁的API,却也使得Spark应用程序在运行期倾向于创建大量临时对象,对GC造成压力。在现有RDD API的基础之上,我们固然可以利用mapPartitions方法来重载RDD单个分片内的数据创建方式

pyspark将RDD转成dict

孤人 提交于 2020-01-17 13:02:24
在日常的数据处理过程,需要生成一个dict。 词典数据来源主要有有:HIVE表、HDFS上的文件。 1. 从HIVE表读数据并转成dict from pyspark import SparkContext from pyspark . sql import HiveContext , SparkSession sc = SparkContext ( ) sql_context = HiveContext ( sc ) sql_data = sqlContext . sql ( "SELECT key,value from db.table" ) sql_data_rdd = sql_data . rdd . map ( lambda x : ( x [ 0 ] , x [ 1 ] ) ) my_dict = sql_data_rdd . collectAsMap ( ) 2. 从HDFS读文件并转成dict def map_2_dic ( r ) : # r 表示一行文本 filds = r . strip ( ) . split ( '\t' ) # filds[0]是key, filds[1]是value return filds [ 0 ] , filds [ 1 ] textRDD = sc . textFile ( "《your hdfs file path》" ) my

Spark(三)【Spark核心RDD,SparkOnYarn】

对着背影说爱祢 提交于 2020-01-17 04:48:28
在上一篇文章中,讲了Spark的简单应用开发,在构建数据源的时候,返回了一个RDD对象,所有对数据的操作,都是在这个对象中进行操作,RDD对象是Spark中至为核心的组件,这篇文章就一起来谈谈Spark RDD (resilient distributed dataset) 什么是RDD? RDD( resilient distributed dataset ) 弹性分布式数据集; RDD代表是一个不可变的、可分区的、支持并行计算的元素集合(类似于Scala中的不可变集合) ,RDD可以通过HDFS、Scala集合、RDD转换、外部的数据集(支持InputFormat)获得;并且我们可以通知Spark将RDD持久化在内存中,可以非常高效的重复利用或者在某些计算节点故障时自动数据恢复; 如何创建RDD Scala 集合创建 数组中数字进行求和计算,两种方法 parallelize makeRDD (查看源码最终调用的还是 parallelize ) package com . netzhuo import org . apache . spark . rdd . RDD import org . apache . spark . { SparkConf , SparkContext } object RDDByCollectionTest extends App { //

Spark键值对Pair RDD操作

泄露秘密 提交于 2020-01-15 08:05:42
1、键值对pair RDD产生的背景 pair RDD提供了一些新的操作接口,比如统计每个产品的评论,将数据中键相同的分为一组,将两个不同的RDD进行分组合并等。我们通常从一个RDD中提取某些字段如事件时间、用户ID,并使用这些字段作为pair RDD操作中的键。 2、创建pair RDD (1)读取键值对格式数据时直接返回其键值对数据组成的pair RDD。 (2)使用map()函数将普通的RDD转为pair RDD。 3、pair RDD的转化操作 (1)mapValues() 对pair RDD中的每个值应用一个函数而不改变键,功能类似于map{case (x,y):(x,func(y))} (2)reduceByKey() 与reduce相似,接收一个函数,为数据集中每个键进行并行的归约操作,每个归约操作会将键相同的值合并起来。返回一个由各键和对应键归约出来的结果值组成的新RDD。 例如:在Scala中使用reduceBykey()和mapValues()计算每个键对应的平均值 rdd.mapValues(x =>(x,1)).reduceByKey((x,y)=>(x._1 + y._1,x._2 + y._2)) (注:此处x=>(x,1)是为了构造pair RDD,reduceByKey(x,y)中的x,y指的是键相同的两个值) (3)combineByKey()

Spark——控制算子

拟墨画扇 提交于 2020-01-15 07:39:04
概念: 控制算子有三种,cache,persist,checkpoint ,以上算子都可以将RDD持久化,持久化的单位是partition。cache和persist都是懒执行的。必须有一个action类算子触发执行。checkpoint算子不仅能将RDD持久化到磁盘,还能切断RDD之间的依赖关系。 cache 默认将RDD的数据持久化到内存中。cache是懒执行。 注意 :cache () = persist()=persist(StorageLevel.Memory_Only) 测试代码: SparkConf conf = new SparkConf ( ) ; conf . setMaster ( "local" ) . setAppName ( "CacheTest" ) ; JavaSparkContext jsc = new JavaSparkContext ( conf ) ; JavaRDD < String > lines = jsc . textFile ( "./NASA_access_log_Aug95" ) ; lines = lines . cache ( ) ; long startTime = System . currentTimeMillis ( ) ; long count = lines . count ( ) ; long endTime

Spark DataFrame、Spark SQL、Spark Streaming入门教程

五迷三道 提交于 2020-01-14 23:06:47
文章目录 前言 1、RDD、Spark DataFrame、Spark SQL、Spark Streaming 2、Spark DataFrame 2.1 创建基本的Spark DataFrame 2.2 从各类数据源创建Spark DataFrame 2.3 Spark DataFrame持久化数据 2.4 Dataframe常见的API 3、Spark SQL 4、Spark Streaming 实时计算TCP端口的数据 前言   本文介绍Spark DataFrame、Spark SQL、Spark Streaming入门使用教程,这些内容将为后面几篇进阶的streaming实时计算的项目提供基本计算指引,本文绝大部分内容来自Spark官网文档(基于PySpark): Spark DataFrame 、 Spark SQL 、 Spark Streaming 1、RDD、Spark DataFrame、Spark SQL、Spark Streaming   RDD:大家最熟悉的数据结构,主要使用transmissions和actions 相关函数式算子完成数据处理和数理统计,例如map、reduceByKey,rdd没有定义 Schema(一般指未定义字段名及其数据类型), 所以一般用列表索引号来指定每一个字段。 例如, 在电影数据的推荐例子中: move_rdd.map

Spark优化 – 基础篇

邮差的信 提交于 2020-01-14 19:13:16
  大数据调优总体方向:CPU,内存以及IO(Disk,Network)三个方面来进行。   对于多次使用的数据(RDD/DataFrame),通过cache()或者persis()来进行缓存,避免每一次都从数据源获取(减少磁盘IO); 系统资源优化   如下参数可以进行调优(可以参见附录中介绍的spark和yarn的交互内容): num-executors :executor数量(Spark Job的进程数量);结合executor-core进行考虑,两者相乘的量[40,100],尽量不要超过YARN的总core的指定比例,有的说25%,有的说50% executor-memory :executor内存上线,建议8G左右,申请的内存总量(num-executors*executor-memory)不要超过YARN的80%; executor-cores :executor的核数(线程数),即并行执行task的数据量,建议值4个,总量不要超过YARN总核数的50%; driver-memory :默认1G,足以。 spark.default.parallelizm :spark的并行度,默认数是待处理数据的hdfs的datablock数量;但是如果数据量很大的话明显不合适,task数量>>core的数量会拉低效率;spark官方建议要么是和分配的从cores数量保持一致

Remove first element in RDD without using filter function

こ雲淡風輕ζ 提交于 2020-01-14 18:47:54
问题 I have built an RDD from a file where each element in the RDD is section from the file separated by a delimiter. val inputRDD1:RDD[(String,Long)] = myUtilities.paragraphFile(spark,path1) .coalesce(100*spark.defaultParallelism) .zipWithIndex() //RDD[String, Long] .filter(f => f._2!=0) The reason I do the last operation above (filter) is to remove the first index 0. Is there a better way to remove the first element rather than to check each element for the index value as done above? Thanks! 回答1

【Spark】RDD创建总结

前提是你 提交于 2020-01-14 07:37:45
文章目录 方式一、从内存中创建 1.makeRDD 2.parallelize 方式二、从文件系统创建 1.textFile 2.wholeTextFiles 3.sequenceFile 4、saveAsHadoopFile 5.newAPIHadoopRDD 方式一、从内存中创建 1.makeRDD scala > val df = sc.makeRDD ( List ( "huangmouren" , "henshuai" )) df: org.apache.spark.rdd.RDD [ String ] = ParallelCollectionRDD [ 66 ] at makeRDD at < console > :27 2.parallelize scala > val dc = sc.parallelize ( List ( "huangmouren" , "henshuai" ) ,2 ) dc: org.apache.spark.rdd.RDD [ String ] = ParallelCollectionRDD [ 67 ] at parallelize at < console > :27 scala > dc.partition partitioner partitions scala > dc.partitions.size res16: Int = 2