
scala
文章平均质量分 80
cleargy
这个作者很懒,什么都没留下…
展开
-
Spark ALS推荐系统用户ID非整数的解决思路
1.背景描述:日志中用户ID一般都是非整数的字符串,在使用Spark ALS做推荐时,ALS的train函数的第一个参数是Rating。而Rating的第一个参数userID是Int型,故要使用Rating来做训练数据集,就要将用户ID字符串映射成Int型。2.解决思路:Spark的RDD自带方法zipWithUniqueId可以将RDD中元素和一个唯一ID组合成键/值对。3.原理原创 2017-12-25 16:12:45 · 2395 阅读 · 2 评论 -
Spark算子:Action之first、count、reduce、collect
1、first:def first(): T该函数返回RDD的第一个元素,不排序。scala> var rdd1 = sc.makeRDD(Array(("A","1"),("B","2"),("C","3")),2)rdd1: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[3原创 2018-09-20 16:35:10 · 251 阅读 · 0 评论 -
Spark算子:Action之aggregate、fold、lookup
1、aggregate:def aggregate[U](zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)(implicit arg0: ClassTag[U]): U该函数用于聚合RDD中的元素,先使用seqOp将RDD中每个分区中的T类型元素聚合成U类型,再使用combOp将之前每个分区聚合后的U类型聚合成U类型,特别注意seqOp和...原创 2018-09-20 17:51:05 · 352 阅读 · 0 评论 -
Spark算子:Action之countByKey、foreach、foreachPartition、sortBy
1、countByKey:def countByKey(): Map[K, Long]countByKey用于统计RDD[K,V]中每个K的数量。scala> var rdd1 = sc.makeRDD(Array(("A",0),("A",2),("B",1),("B",2),("B",3)))rdd1: org.apache.spark.rdd.RDD[(String, In..原创 2018-09-21 09:02:50 · 327 阅读 · 0 评论 -
Spark算子:Action之saveAsTextFile、saveAsSequenceFile、saveAsObjectFile
1、saveAsTextFile1)def saveAsTextFile(path: String): Unit2)def saveAsTextFile(path: String, codec: Class[_ <: CompressionCodec]): UnitsaveAsTextFile用于将RDD以文本文件的格式存储到文件系统中。var rdd1 = sc.makeRD...原创 2018-09-21 09:02:30 · 1229 阅读 · 0 评论 -
Spark算子:Action之saveAsHadoopFile、saveAsHadoopDataset
1、saveAsHadoopFile:1)def saveAsHadoopFile(path: String, keyClass: Class[_], valueClass: Class[_], outputFormatClass:Class[_ <: OutputFormat[_, _]], codec: Class[_ <: CompressionCodec]): Unit2...原创 2018-09-21 09:13:18 · 1882 阅读 · 0 评论 -
Spark算子:Action之saveAsNewAPIHadoopFile、saveAsNewAPIHadoopDataset
1、saveAsNewAPIHadoopFile1)def saveAsNewAPIHadoopFile[F <: OutputFormat[K, V]](path: String)(implicit fm: ClassTag[F]): Unit2)def saveAsNewAPIHadoopFile(path: String, keyClass: Class[_], valueCla...原创 2018-09-21 09:20:42 · 4879 阅读 · 0 评论 -
Spark算子:transformation之键值转换groupByKey、reduceByKey、reduceByKeyLocally
1、groupByKey1)def groupByKey(): RDD[(K, Iterable[V])]2)def groupByKey(numPartitions: Int): RDD[(K, Iterable[V])]3)def groupByKey(partitioner: Partitioner): RDD[(K, Iterable[V])]该函数用于将RDD[K,V]中每个...原创 2018-09-21 09:42:38 · 266 阅读 · 0 评论 -
Spark算子:transformation之键值转换combineByKey、foldByKey
1、combineByKey1)def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C): RDD[(K, C)]2)def combineByKey[C](createCombiner: (V) => C, mergeValu...原创 2018-09-21 09:51:42 · 198 阅读 · 0 评论 -
Spark算子:transformation之键值转换join、cogroup
1、join1)def join[W](other: RDD[(K, W)]): RDD[(K, (V, W))]2)def join[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, W))]3)def join[W](other: RDD[(K, W)], partitioner: Partitioner): RDD[(K,...原创 2018-09-21 10:03:51 · 187 阅读 · 0 评论 -
Spark算子:transformation之键值转换leftOuterJoin、rightOuterJoin、subtractByKey
1、leftOuterJoin1)def leftOuterJoin[W](other: RDD[(K, W)]): RDD[(K, (V, Option[W]))]2)def leftOuterJoin[W](other: RDD[(K, W)], numPartitions: Int): RDD[(K, (V, Option[W]))]3)def leftOuterJoin[W](ot...原创 2018-09-21 10:12:05 · 220 阅读 · 0 评论 -
Spark算子:transformation之键值转换partitionBy、mapValues、flatMapValues
1、partitionBy:def partitionBy(partitioner: Partitioner): RDD[(K, V)]该函数根据partitioner函数生成新的ShuffleRDD,将原RDD重新分区。scala> var rdd1 = sc.makeRDD(Array((1,"A"),(2,"B"),(3,"C"),(4,"D")),2)rdd1: org....原创 2018-09-21 10:16:24 · 245 阅读 · 0 评论 -
Spark算子:RDD创建的方式
创建RDD大体分为两类方式:(1)通过集合创建;(2)通过外部存储创建。1、通过集合方式(1)parallelize:def parallelize[T](seq: Seq[T], numSlices: Int = defaultParallelism)(implicit arg0: ClassTag[T]): RDD[T]参数seq指Seq集合,numSlices指分区数。sc...原创 2018-09-21 10:28:53 · 235 阅读 · 0 评论 -
Spark算子:transformation之zipWithIndex、zipWithUniqueId
1、zipWithIndex:def zipWithIndex(): RDD[(T, Long)]该函数是将RDD中的元素和该元素在RDD中的位置(索引号)组合成键值对,并返回一个元素为键值对的新RDD。scala> var rdd2 = sc.makeRDD(Seq("A","B","R","D","F"),2)rdd2: org.apache.spark.rdd.RDD[St..原创 2018-09-20 16:27:09 · 516 阅读 · 0 评论 -
Spark算子:transformation之zip、zipPartitions
1、zip:def zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]该函数用于将两个RDD组合成Key/Value形式的RDD,两个RDD的partition数量以及元素数量都要相同,否则会抛出异常。scala> var rdd1 = sc.makeRDD(1 to 5,2)rdd1: org.apach...原创 2018-09-20 16:12:07 · 380 阅读 · 0 评论 -
scala中的apply方法与unapply方法
1.apply方法当scala中类或者对象有一个主要用途的时候,apply方法就是一个很好地语法糖。请看下面一个简单的例子:class Foo(foo: String) {}object Foo { def apply(foo: String) : Foo = { new Foo(foo) }}定义了一个Foo类,并且在这个类中,转载 2018-01-11 16:17:46 · 330 阅读 · 0 评论 -
idea新建maven-scala项目问题
1.idea新建scala问题报错:org.jetbrains.jps.incremental.scala.remote.ServerException原因:新建的maven-scala项目的pom.xml默认了scala版本号,这个版本号需要改为安装的scala版本号2.解决办法查看系统安装的scala版本号,替换pom.xml下的scala.version的值即可。原创 2018-01-16 15:53:21 · 827 阅读 · 0 评论 -
Spark1.6.0 Scala创建DataFrame
一.通过文件生成DF(1)通过SQLContext的csvFile函数加载csv文件生成DFimport com.databricks.spark.csv._ val students=sqlContext.csvFile(filePath="StudentData.csv", useHeader=true, delimiter='|')csvFile方法接收需要加载的csv文件路径file...原创 2018-03-13 10:22:32 · 1916 阅读 · 0 评论 -
Window下的Spark开发环境配置
Window的Spark环境配置分三步:1. Hadoop下载与配置 下载:http://archive.apache.org/dist/hadoop/core/,比如hadoop-2.6.0版本 配置:配置HADOOP_HOME到环境变量,cmd -> hadoop version命令查看是否配置成功。 设置:hadoop-2.6.0\etc\hadoop\hadoop-e...原创 2018-05-07 16:33:54 · 260 阅读 · 0 评论 -
Spark 创建DataFrame的三种方式
1.从数据库读数据创建DF /**SQLComtext 创建 DataFrame 1**/ def createDataFrame(sqlCtx: SQLContext): Unit = { val prop = new Properties() prop.put("user","root") prop.put("password","abc314") ...原创 2018-07-31 14:16:27 · 1574 阅读 · 0 评论 -
Spark-算子系列
1、RDD创建2、RDD:基本转换操作(1)map、flatMap和distinct(2)coalesce与repartition(3)randomSplit与glom(4)union、intersection、subtract(5)mapPartitions、mapPartitionsWithIndex(6)zip、zipPartitions(7)zipWithI...原创 2018-08-17 17:44:19 · 216 阅读 · 0 评论 -
Spark算子:Action之take、top、takeOrdered
1、take:def take(num: Int): Array[T]take函数用于获取RDD中从0到num-1下标的元素(不排序)。scala> var rdd1 = sc.makeRDD(Seq(10, 4, 2, 12, 3))rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[40] at makeRD...原创 2018-09-20 11:15:34 · 3224 阅读 · 0 评论 -
Spark算子:transformation之map、flatMap和distinct
1、map将RDD中的每个元素通过map中的函数映射为一个新的元素,并返回一个新类型的RDD。输入时的分区数与输出时的分区数保持一致。//HDFS上的txt文件hadoop fs -cat /tmp/1.txthello worldhello sparkhello hive //读取HDFS文件到RDDscala> var data = sc.textFile("/t...原创 2018-09-20 12:48:17 · 1252 阅读 · 0 评论 -
Spark算子:transformation之coalesce、repartition
1、coalesce:def coalesce(numPartitions: Int, shuffle: Boolean = false)(implicit ord: Ordering[T] = null): RDD[T]该函数使用HashPartitioner将RDD重新分区。第一个参数是分区数,第二个参数表示是否进行shuffle操作,默认false不进行shuffle。scala&...原创 2018-09-20 14:14:32 · 234 阅读 · 0 评论 -
Spark算子:transformation之randomSplit、glom
1、randomSplit:def randomSplit(weights: Array[Double], seed: Long = Utils.random.nextLong): Array[RDD[T]]该函数根据权重数组weights将一个RDD切分为多个RDD,seed是random种子(可忽略)。scala> var rdd = sc.makeRDD(1 to 10,10...原创 2018-09-20 14:53:18 · 420 阅读 · 0 评论 -
Spark算子:transformation之union、intersection、subtract
1、union:def union(other: RDD[T]): RDD[T]该函数是不去重的合并两个RDD。scala> var rdd1 = sc.makeRDD(1 to 2,1)rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[45] at makeRDD at :21 scala> rdd...原创 2018-09-20 15:09:39 · 346 阅读 · 0 评论 -
Spark算子:transformation之mapPartitions、mapPartitionsWithIndex
1、mapPartitions:def mapPartitions[U](f: (Iterator[T]) => Iterator[U], preservesPartitioning: Boolean = false)(implicit arg0: ClassTag[U]): RDD[U]该函数类似于map,只不过映射函数的参数是RDD每个分区的迭代器。若在映射的过程中需要频繁地创建...原创 2018-09-20 15:31:47 · 575 阅读 · 0 评论 -
Spark算子:RDD分区中的元素和数量统计
1、分区逻辑Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。2、分区元素统计可以利用RDD的mapPartitionsWithIndex方法来统计每个分区中的元素及数量。示例1:假如创建一个RDD,默认分区15个,因为...原创 2018-09-27 10:47:26 · 1174 阅读 · 0 评论