rdd

Spark 1.6.0 throwing classcast exception in Cluster Mode works fine in local mode

匿名 (未验证) 提交于 2019-12-03 00:46:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am trying simple word-count example on spark in Cluster Mode and Local Mode it works fine in local mode but throwing class cast exception in Cluster Mode here is code snippet... package com.example import com.typesafe.config.ConfigFactory import org.apache.spark.{SparkConf, SparkContext} /** * Created by Rahul Shukla on 20/2/16. */ object SampleFile extends App { val config = ConfigFactory.load() val conf = new SparkConf() .setAppName("WordCount") //.setMaster("spark://ULTP:7077") .setMaster("local") .setSparkHome(config.getString("example

[Spark] RDD创建

匿名 (未验证) 提交于 2019-12-03 00:40:02
创建RDD的方式: 1 - 测试:通过并行化一个已经存在的集合,转化成RDD; 2 - 生产:引用一些外部的数据集(共享的文件系统,包括HDFS、HBase等支持Hadoop InputFormat的都可以)。 第一种方式创建RDD [hadoop@hadoop01 ~]$ spark-shell --master local[2] Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 18/07/12 22:30:58 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 18/07/12 22:31:05 WARN ObjectStore: Failed to get database global_temp,

spark 优化算子选择

匿名 (未验证) 提交于 2019-12-03 00:40:02
ժҪ   2.使用mapPartitions替代普通map   3.使用foreachPartitions替代foreach   4.使用filter之后进行coalesce操作   5.使用repartitionAndSortWithinPartitions替代repartition与sort类操作   6.使用broadcast使各task共享同一Executor的集合替代算子函数中各task传送一份集合   7.使用相同分区方式的join可以避免Shuffle   8.map和flatMap选择   9.cache和persist选择   10.zipWithIndex和zipWithUniqueId选择    内容 1.使用reduceByKey/aggregateByKey替代groupByKey 2.使用mapPartitions替代普通map mapPartitions类的算子,一次函数调用会处理一个partition所有的数据,而不是一次函数调用处理一条,性能相对来说会高一些。但是有的时候,使用mapPartitions会出现OOM(内存溢出)的问题。因为单次函数调用就要处理掉一个partition所有的数据,如果内存不够,垃圾回收时是无法回收掉太多对象的,很可能出现OOM异常。所以使用这类操作时要慎重! 3.使用foreachPartitions替代foreach

Spark任务中如何确定park分区数、task数目、core数、worker节点个数、excutor数量

匿名 (未验证) 提交于 2019-12-03 00:37:01
晚上找了半天,总结一下网上的资源: 先上图: 每一个过程的任务数,对应一个inputSplit1, Partition Block 绉颁负 InputSplit Task Executor 注意: 这里的core是虚拟的core而不是机器的物理CPU核,可以理解为就是Executor的一个工作线程。 而 Task被执行的并发度 = Executor数目 * 每个Executor核数。 至于partition的数目: 对于数据读入阶段,例如sc.textFile,输入文件被划分为多少InputSplit就会需要多少初始Task。 在Map阶段partition数目保持不变。 在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数,还有一些算子是可配置的。 RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。 申请的计算节点(Executor)数目和每个计算节点核数,决定了你同一时刻可以并行执行的task。 比如的RDD有100个分区,那么计算的时候就会生成100个task,你的资源配置为10个计算节点,每个两2个核,同一时刻可以并行的task数目为20,计算这个RDD就需要5个轮次。 如果计算资源不变,你有101个task的话

实现简单的SparkWordCount

匿名 (未验证) 提交于 2019-12-03 00:36:02
package *** import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} class SparkWC { } object SparkWC { def main(args: Array[String]): Unit = { // 文件信息配置类,并设置应用程序名称(setAppName) // local[2]:本地启用两个线程模拟集群运行人物 // local[*]:本地有多少个空闲线程就启用多少个线程运行任务 val conf: SparkConf = new SparkConf().setAppName("SparkWC").setMaster("local[*]") // 创建Spark的上下文对象,也是他提交任务到集群的入口类 val sc: SparkContext = new SparkContext(conf) // 读取数据 val lines: RDD[String] = sc.textFile(args(0)) // 处理数据 val words: RDD[String] = lines.flatMap(_.split(" ")) val tup: RDD[(String, Int)] = words.map((_, 1)) val reduced

PySpark中RDD与DataFrame

匿名 (未验证) 提交于 2019-12-03 00:27:02
RDD是一个抽象的分布式数据集合,它提供了一系列转化操作(例如基本的 map() 、 flatMap() 、 filter() ,类集合操作 union() 、 intersection() 、 subtract() )和行动操作(例如 collect() 、 count() 、 take() 、 top() 、 reduce() 、 foreach() )。可以说,RDD是非常灵活的数据集合,其中可以存放类型相同或者互异的数据,同时可以指定任何自己期望的函数对其中的数据进行处理。 创建一个RDD: # 从list中创建 rdd = sc.parallelize([ 1 , '2' , ( 3 , 4 ), [ '5' , '6' ]]) # 从文件中读取 rdd = sc.textFile( '\path\to\file' ) 还有一类RDD是key-value Pair RDD,即规定RDD每个元素都是一个二元组,其中第一个值是key,第二个值为value,key一般选取RDD中每个元素的一个字段。 创建一个Pair RDD: # 创建一个普通RDD rdd = sc.parallelize([( 'a' , 1 , 2 ), ( 'b' , 3 , 4 ), ( 'c' , 5 , 6 )]) # 提取每个元素的第一个元素作为key剩余元素作为value创建Pair RDD

[Spark的LeftOuterJoin操作]

匿名 (未验证) 提交于 2019-12-03 00:26:01
t1,p3,u1,1,300 t2,p1,u2,1,100 t3,p1,u1,1,100 t4,p2,u2,1,10 t5,p4,u4,1,9 t6,p1,u1,1,100 t7,p4,u1,1,9 t8,p4,u5,2,40 一、RDD的LeftOuterJoin操作 /** * Perform a left outer join of `this` and `other`. For each element (k, v) in `this`, the * resulting RDD will either contain all pairs (k, (v, Some(w))) for w in `other`, or the * pair (k, (v, None)) if no elements in `other` have key k. Hash-partitions the output * using the existing partitioner/parallelism level. */ def leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))] = self.withScope { leftOuterJoin(other, defaultPartitioner(self, other))

Spark离线计算优化――leftOuterJoin优化

匿名 (未验证) 提交于 2019-12-03 00:22:01
两个k-v格式的RDD进行leftOuterJoin操作如果数据量较大复杂度较高的话计算可能会消耗大量时间。 可以通过两种方式进行优化: 1、leftOuterJoin操作前,两个RDD自身进行 reduceByKey操作(保证key唯一); 2、两个RDD先map成结果k-v格式,再将两个RDD进行 reduceByKey操作(避免使用leftOuterJoin操作),示例: RDD1:(a, a1) RDD2: (a, b1) 结果应该为(a,a1,b1) 优化过程:先通过map操作 RDD1(a, a1, '') RDD2(a, '', b1),进行 reduceByKey操作得value取不为''的值,即可得到 (a,a1,b1) 除了 reduceByKey,其实也可以用groupByKey代替leftOuterJoin,但是 groupByKey处理结果无法控制value顺序,性能也不如 reduceByKey操作。 reduceByKey操作耗时 ),如果时间较长则选择方式2进行优化。 文章来源: Spark离线计算优化――leftOuterJoin优化

pyspark使用方法

匿名 (未验证) 提交于 2019-12-03 00:22:01
来源, 官网spark2.2.1版本 pyspark不同函数的形象化解释 SparkSession是Spark 2.0引入的新概念。SparkSession为用户提供了统一的切入点,来让用户学习spark的各项功能。 在spark的早期版本中,SparkContext是spark的主要切入点,由于RDD是主要的API,我们通过sparkcontext来创建和操作RDD。对于每个其他的API,我们需要使用不同的context。例如,对于Streming,我们需要使用StreamingContext;对于sql,使用sqlContext;对于hive,使用hiveContext。但是随着DataSet和DataFrame的API逐渐成为标准的API,就需要为他们建立接入点。所以在spark2.0中,引入SparkSession作为DataSet和DataFrame API的切入点。SparkSession实质上是SQLContext和HiveContext的组合(未来可能还会加上StreamingContext),所以在SQLContext和HiveContext上可用的API在SparkSession上同样是可以使用的。SparkSession内部封装了SparkContext,所以计算实际上是由SparkContext完成的。 1、pyspark函数接口 pyspark

Spark中RDD的Key-Value型Transformation算子操作(二)

匿名 (未验证) 提交于 2019-12-03 00:21:02
Spark算子大致上可分为三大类算子: 1、mapValues mapValues是针对[K,V]中对V的值进行map 2、combineByKey 使用用户设置好的聚合函数对每个Key中对Value进行组合(combine),可以将输入类型为 RDD[(K,V)] 转成RDD[(K,C)] 3、reduceByKey 对元素为KV对的RDD中Key相同对元素对Value进行binary_function的reduce操作,因此Key相同的多个元素的值被reduce为一个值,然后与原RDD中的Key组成一个新的KV对 4、partitionBy 对RDD进行分区操作 5、cogroup cogroup指对两个RDD中对KV元素,每个RDD中相同Key中对元素中的元素分别聚合成一个集合 6、join 对两个需要连接对RDD进行cogroup函数操作 7、leftOutJoin 8、rightOutJoin 文章来源: Spark中RDD的Key-Value型Transformation算子操作(二)