1、scalaWordCount

package com._51doit.spark.day1

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object ScalaWorldCount {

def main(args: Array[String]): Unit = {

//第一步:创建SparkContext
    val conf: SparkConf = new SparkConf().setAppName("ScalaWorldCount")
    val sc = new SparkContext(conf)

//第二步,指定以后从hdfs中读取数据创建RDD(神奇的大集合)
    //正确但是不建议sc.textFile(args(0)).flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortBy(_._2,false).saveAsTextFile(args(1))
    val lines: RDD[String] = sc.textFile(args(0))

//切分压平
    val words: RDD[String] = lines.flatMap(_.split(""))

//将单词和1组合在一起
    val wordAndOne: RDD[(String, Int)] = words.map((_,1))

//聚合
    val reduced: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_,1)

//排序
    val sorted: RDD[(String, Int)] = reduced.sortBy(_._2,false)

//将数据保存到HDFS中
    sorted.saveAsTextFile(args(1))

//最后释放资源
    sc.stop()

}
}

2、FavTeacherInSubject

package com._51doit.spark.day2

import java.net.URL

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} object FavTeacherInSubject { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName(this.getClass.getSimpleName) val sc = new SparkContext(conf) val lines: RDD[String] = sc.textFile(args(0)) //处理数据
val subjectTeacherAndOne: RDD[((String, String), Int)] = lines.map(line => {
val teacher = line.substring(line.lastIndexOf("/") + 1)
val url = new URL(line)
val host = url.getHost
val subject = host.substring(0, host.indexOf("."))
((subject, teacher), 1)
}) //聚合
val reduced: RDD[((String, String), Int)] = subjectTeacherAndOne.reduceByKey(_+_) //按照学科进行分组
val grouped: RDD[(String, Iterable[((String, String), Int)])] = reduced.groupBy(_._1._1) //组内排序
val sorted: RDD[(String, List[((String, String), Int)])] = grouped.mapValues(_.toList.sortBy(-_._2).take(2)) //把数据保存到hdfs
sorted.saveAsTextFile(args(1)) sc.stop() }
}

3、(根据IP规则,计算用户的地区分布数量)

package com._51doit.spark.day3

import com._51doit.spark.utils.MyUtil
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext} import scala.collection.mutable.ArrayBuffer object IpLocation { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName(this.getClass.getSimpleName) val sc = new SparkContext(conf) //指定以后从哪里读取数据创建RDD
val accessLog: RDD[String] = sc.textFile(args(0)) //对数据进行处理
val provinceAndOne: RDD[(String, Int)] = accessLog.map(line => {
val fields = line.split("[|]")
val ip = fields(1)
val ipNum = MyUtil.ip2Long(ip)
val province = IpRulesUtil.binarySearch(ipNum)
(province, 1)
}) //聚合
val reudced: RDD[(String, Int)] = provinceAndOne.reduceByKey(_+_) reudced.saveAsTextFile(args(1)) sc.stop()
} }
package com._51doit.spark.day3

import java.io.{BufferedReader, InputStreamReader}
import java.net.URI import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.fs.{FSDataInputStream, FileSystem, Path} import scala.collection.mutable.ArrayBuffer object IpRulesUtil { //初始化一个集合
val ipRules = new ArrayBuffer[(Long, Long, String)]() //hdfs的读取数据的过程
val conf = new Configuration()
val fs: FileSystem = FileSystem.get(URI.create("hdfs://node-1.51doit.com:9000"), conf)
val in: FSDataInputStream = fs.open(new Path("/iprules/ip.txt"))
val reader = new BufferedReader(new InputStreamReader(in)) var line = reader.readLine() while (line != null) {
val fields = line.split("[|]")
val startNum = fields(2).toLong
val endNum = fields(3).toLong
val province = fields(6)
ipRules.append((startNum, endNum, province)) line = reader.readLine()
} def binarySearch(ip: Long) : String = {
var low = 0
var high = ipRules.length - 1
while (low <= high) {
val middle = (low + high) / 2
if ((ip >= ipRules(middle)._1) && (ip <= ipRules(middle)._2))
return ipRules(middle)._3
if (ip < ipRules(middle)._1)
high = middle - 1
else {
low = middle + 1
}
}
"未知"
}
}
												

Spark练习代码的更多相关文章

  1. Spark SQL 代码简要阅读(基于Spark 1.1.0)

    Spark SQL允许相关的查询如SQL,HiveQL或Scala运行在spark上.其核心组件是一个新的RDD:SchemaRDD,SchemaRDDs由行对象组成,并包含一个描述此行对象的每一列的 ...

  2. 整合Kafka到Spark Streaming——代码示例和挑战

    作者Michael G. Noll是瑞士的一位工程师和研究员,效力于Verisign,是Verisign实验室的大规模数据分析基础设施(基础Hadoop)的技术主管.本文,Michael详细的演示了如 ...

  3. 合并Spark社区代码的正确姿势

    原创文章,转载请保留出处 最近刚刚忙完Spark 2.2.0的性能测试及Bug修复,社区又要发布2.1.2了,国庆期间刚好有空,过了一遍2.1.2的相关JIRA,发现有不少重要修复2.2.0也能用上, ...

  4. Spark测试代码

    测试代码: import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.hive.HiveContext ...

  5. Spark算子代码实践

    package com.dingxin.datainit import org.apache.log4j.{Level, Logger} import org.apache.spark.sql.Spa ...

  6. Idea 编写 Spark 示例代码并打包成Jar

    说明:本人是在Linux下搭建的单机Spark环境,也是在Linux下使用Idea14.02进行代码编辑 1. 打开IDEA,在欢迎界面从右下角的Configure -> Plugins进入,安 ...

  7. python+spark程序代码片段

    处理如此的字符串: time^B1493534543940^Aid^B02CD^Aasr^B叫爸爸^Anlp^B{"domain":"com.abc.system.cha ...

  8. spark java 代码example

    https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples

  9. Spark菜鸟学习营Day6 分布式代码运行调试

    Spark菜鸟学习营Day6 分布式代码运行调试 作为代码调试,一般会分成两个部分 语法调试,也就是确定能够运行 结果调试,也就是确定程序逻辑的正确 其实这个都离不开运行,所以我们说一下如何让开发的S ...

随机推荐

  1. ABP框架系列之三十三:(Module-System-模块系统)

    Introduction ASP.NET Boilerplate provides an infrastructure to build modules and compose them to cre ...

  2. http错误代码提示

    1×× 保留 2×× 表示请求成功地接收 3×× 为完成请求客户需进一步细化请求 4×× 客户错误 5×× 服务器错误 200  正常:请求已完成.  201  正常:紧接 POST 命令.  202 ...

  3. noip第16课资料

  4. 我为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比(转载)

    转载自:https://www.sojson.com/blog/48.html 前言: MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 场景: ...

  5. 装Office时,安装程序找不到Office.zh-cn\OfficeMUI问题

    运行Office 2007安装程序,没想到安装并不顺利,竟然在开始安装时就提示:"找不到Office.zh-cn\OfficeMUI.xml",而文件却是完整存在的,怎么回事? 原 ...

  6. select 的问题

    #include <errno.h> #include <string.h> #include <fcntl.h> #include <sys/socket. ...

  7. Angular使用总结 --- 通过指令动态添加组件

    之前自己写的公共组件,都是会先引入,需要调起的时候再通过service控制公共组件状态.值.回调函数什么的.但是有一些场景不适合这种方式,还是动态添加组件更加好.通过写过的一个小组件来总结下. 创建组 ...

  8. LeetCode--No.015 3Sum

    15. 3Sum Total Accepted: 131800 Total Submissions: 675028 Difficulty: Medium Given an array S of n i ...

  9. Python函数——装饰器

    前言 给下面的函数加上运行时间 def fib(n): a, b = 0, 1 for i in range(n): print(b) a, b = b, a+b return b a = fib(5 ...

  10. 脚手架vue-cli系列一:安装与规范

    我很喜欢Vue的一个重要原因就是因为它的vue-cli,这个工具可以让一个简单的命令行工具来帮助我快速地构建一个足以支撑实际项目开发的Vue环境,并不像Angular和React那样要在Yoman上找 ...