运维开发网

Spark安装(Ubuntu14.04)、转换(transformations)和动作(action)备忘

运维开发网 https://www.qedev.com 2020-04-09 15:17 出处:网络 作者:运维开发网整理
一、安装 1.下载二进制压缩包 http://www.scala-lang.org/downloads 2.移动至:/usr/local/share sudo mv scala-2.12.1.tgz /usr/local/share3.解压 cd /usr/local/share sudo tar zxf scala-2.12.1.tgz 4.配置 4.1-打开配置文件 sudo gedit /e

一、安装

1.下载二进制压缩包 http://www.scala-lang.org/downloads 2.移动至:/usr/local/share
sudo mv scala-2.12.1.tgz /usr/local/share
3.解压
cd /usr/local/share
sudo tar zxf scala-2.12.1.tgz

4.配置

4.1-打开配置文件
sudo gedit /etc/profile
4.2-添加scala路径配置
# Scala config
export SCALA_HOME="/usr/local/share/scala-2.12.1"
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$SCALA_HOME/bin
4.3-使配置生效
source /etc/profile
5.测试是否成功
cd ~
scala-version
如果安装成功则会输出类似一下内容 Scala code runner version 2.12.1 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc. 安装成功后可以简单地通过 Spark 交互式shell bin/spark-shell开始一个 Scala shell,或bin/pyspark开始一个 Python shell。

二、转换(transformations)

在 Spark 中,所有的转换(transformations)都是惰性(lazy)的,它们不会马上计算它们的结果。相反的,它们仅仅记录转换操作是应用到哪些基础数据集(例如一个文件)上的。转换仅仅在这个时候计算:当动作(action) 需要一个结果返回给驱动程序的时候。这个设计能够让 Spark 运行得更加高效。例如,我们可以实现:通过 map 创建一个新数据集在 reduce 中使用,并且仅仅返回 reduce 的结果给 driver,而不是整个大的映射过的数据集。

下面的表格列了Spark支持的一些常用 transformations。

转换 作用
map(func) 返回一个新的分布式数据集,它将数据源的每个元素传递给函数func映射。
filter(func) 返回一个新的数据集,从数据源中选中一些通过函数 func过滤的元素。
flatMap(func) 类似于 map,但是每个输入项能被映射成多个输出项(所以 func 必须返回一个序列,而不是单个 item)。
mapPartitions(func) 类似于 map,但是分别运行在 RDD 的每个分区上,所以 func 的类型必须是 Iterator<T> => Iterator<U>。
mapPartitionsWithIndex(func) 类似于 mapPartitions,但是 func 需要提供一个 integer 值描述索引(index),所以 func 的类型必须是 (Int, Iterator) => Iterator。
sample(withReplacement, fraction, seed) 对数据进行采样。
union(otherDataset) 返回一个新的数据集,其中包含源数据集和参数中元素的并集。
intersection(otherDataset) 返回一个包含源数据集和参数中的元素交集的新RDD。
distinct([numTasks])) 返回包含源数据集的不同元素的新数据集。
groupByKey([numTasks]) 当在(K,V)键值对的数据集上调用时,返回(K,Iterable)键值对的数据集。 注意:如果要进行分组以便对每个键执行聚合(如求总和或求平均值),使用reduceByKey或combineByKey将产生更好的性能。 默认情况下,输出中的并行性级别取决于父RDD的分区数。 您可以传递可选的numTasks参数,以设置不同数量的任务。
reduceByKey(func, [numTasks]) 当在(K,V)键值对的数据集上调用时,返回(K,V)键值对的数据集,其中使用给定的reduce函数func聚集每个键的值,其必须是类型(V,V)=> V.像groupByKey一样,reduce任务的数量可以通过可选的第二个参数来配置。
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 当在(K,V)键值对的数据集上调用时,返回(K,U)键值对的数据集,其中使用给定的组合函数和中性“零”值来聚合每个键的值。 允许与输入值类型不同的聚合值类型,同时避免不必要的分配。 像groupByKey中一样,reduce任务的数量可以通过可选的第二个参数来配置。
sortByKey([ascending], [numTasks]) 当对(K,V)键值对的数据集(其中K实现Ordered)调用时,返回按升序或降序按键排序的(K,V)键值对的数据集。
join(otherDataset, [numTasks]) 当调用(K,V)和(K,W)类型的数据集时,返回具有每个键的所有元素对的(K,(V,W))键值对的数据集。 外部联接也通过leftOuterJoin和rightOuterJoin支持。
cogroup(otherDataset, [numTasks]) 当调用(K,V)和(K,W)类型的数据集时,返回(K,Iterable,Iterable)元组的数据集。 此操作也称为groupWith。
cartesian(otherDataset) 当调用T和U类型的数据集时,返回(T,U)对(所有元素对)的数据集。
pipe(command, [envVars]) 通过shell命令管道RDD的每个分区,例如。 一个Perl或bash脚本。 RDD元素被写入进程的stdin,并且以行的形式输出到其stdout作为字符串的RDD返回。
coalesce(numPartitions) 将RDD中的分区数减少到numPartitions。用于过滤掉大型数据集后更有效地运行操作。
repartition(numPartitions) 随机重新刷新RDD中的数据以创建更多或更少的分区,并在它们之间进行平衡。 这总是在网络上刷新所有数据。

三、动作(actions)

在 Spark 中,动作(actions) 在数据集上进行计算之后返回一个值到驱动程序。

下面的表格列了Spark支持的一些常用 actions。

转换 作用
reduce(func)                        使用函数func(它接受两个参数并返回一个)聚合数据集的元素。 函数应该是可交换和关联的,以便它可以被正确地并行计算。
collect() 在驱动程序中将数据集的所有元素作为数组返回。 这在返回足够小的数据子集的过滤器或其他操作之后通常是有用的。
count() 返回数据集中的元素数。
first() 返回数据集的第一个元素(类似于take(1))。
take(n) 返回数组中前n个元素的数组。 注意,这当前不是并行执行的,是驱动程序计算所有元素。
takeSample(withReplacement, num, [seed]) 返回具有数据集的num个元素的随机样本的数组,具有或不具有替换,可选地预指定随机数生成器种子。
takeOrdered(n, [ordering]) 使用它们的自然顺序或自定义比较器返回RDD的前n个元素。
saveAsTextFile(path) 将数据集的元素作为文本文件(或一组文本文件)写入本地文件系统,HDFS或任何其他Hadoop支持的文件系统中的给定目录中。 Spark将对每个元素调用toString将其转换为文件中的一行文本。
saveAsSequenceFile(path) (Java and Scala) 将数据集的元素作为Hadoop SequenceFile写入本地文件系统,HDFS或任何其他Hadoop支持的文件系统中的给定路径中。 这可以在实现Hadoop的Writable接口的键值对的RDD上使用。 在Scala中,它也可以隐式转换为Writable类型(Spark包括基本类型的转换,如Int,Double,String等)。
saveAsObjectFile(path) (Java and Scala) 使用Java序列化以简单的格式编写数据集的元素,然后可以使用SparkContext.objectFile()加载它。
countByKey() 仅适用于(K,V)类型的RDD。 返回具有每个键的计数的(K,Int)键值对的哈希表。
foreach(func) 对数据集的每个元素运行函数func。

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号