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

来源:互联网 发布:官方期货交易软件 编辑:程序博客网 时间:2024/06/07 07:13

一、安装

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/sharesudo tar zxf scala-2.12.1.tgz

4.配置

4.1-打开配置文件
sudo gedit /etc/profile
4.2-添加scala路径配置
# Scala configexport 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。

0 0
原创粉丝点击