初学spark和scala,做些小分析练习,学习资料可以看看这里

如何搭建scala环境和spark环境我就不说了,网上一堆堆的。


开发环境
scala version:2.11.2
spark version:spark-2.0.0-bin-hadoop2.4
Eclipse:4.4.2 Juno Service Release 2

本次实例是单机运行的,步骤如下:
1. 模拟2000W人口数据
2. 编写程序分析男女比例分布
3. 编写程序分析人口星座分布


一、 模拟数据

2000W行数据是自己模拟出来的,模拟随机生成人口资料。

package com.soecode.SparkDemoimport java.io.PrintWriter/*** 模拟一个城市人口*/
object CreateTestFile {def main(args: Array[String]) {val start = System.currentTimeMillis();val out = new PrintWriter("d://renkou.txt")for(i <- 1 to 20000000){out.println(i+","+getName+","+getBirth+","+getSex)}out.close()val end = System.currentTimeMillis();print("任务结束,耗时:"+(end-start)+"ms")}//随机产生名def getName:String = {val chs = "abcdefghijklmnopqrstuvwxyz"val len = (1+5*Math.random()).toIntvar str ="" for(i<-1 to len){val l = (0+25*Math.random()).toIntstr+=chs(l)                         }str}//随机产生出生日期def getBirth:String ={val year = (1949+67*Math.random()).toIntval month = (1 + 12*Math.random()).toIntval day = (1+30*math.random).toIntyear+"-"+month+"-"+day        }//随机产生性别def getSex:Integer=if(Math.random()>0.3) 1 else 0
}

二、分析男女分布

代码:

package com.soecode.SparkDemoimport org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import scala.collection.mutable.ArrayBuffer/*** 分析男女分布*/
object StatBG {def main(args: Array[String]) {val conf = new SparkConf().setAppName("Demo").setMaster("local");//spark confval sc = new SparkContext(conf);//spark上下文println("任务开始")val start = System.currentTimeMillis();val lines = sc.textFile("d://renkou.txt")//读取本地文件建立RDDimport scala.util.parsing.json.JSON//使用map操作,形成新的集合。 如:Map(1,0,1,1,1)  0 代表女,1代表男val result = lines.map(s=>{val sp = s.split(",")sp(3)}).countByValueval end = System.currentTimeMillis();println("任务结束,耗时:"+(end-start)+"ms");print(result)}
}

运行结果:

任务结束,耗时:10114ms
Map(0 -> 6001173, 1 -> 13998827)

三、分析人口星座分布

代码:

package com.soecode.SparkDemoimport org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import scala.collection.mutable.ArrayBuffer/*** 分析星座分布*/
object StatBirth {val dayArr = Array[Integer]( 20, 19, 21, 20, 21, 22, 23, 23, 23, 24, 23, 22 )val constellationArr = Array[String]("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座" )def main(args: Array[String]) {val conf = new SparkConf().setAppName("Demo").setMaster("local");val sc = new SparkContext(conf);println("任务开始")val start = System.currentTimeMillis();val lines = sc.textFile("d://renkou.txt")import scala.util.parsing.json.JSON//RDD进行map操作,获取每行,然后split分割,换算星座返回新的map(金牛座,水瓶座,……)val result = lines.map(s=>{val sp = s.split(",")val sp_birth = sp(2).split("-")val month = sp_birth(1).toIntval day = sp_birth(2).toIntgetConstellation(month, day)    }).countByValueval end = System.currentTimeMillis();println("任务结束,耗时:"+(end-start)+"ms");for(m <- result) println(m._1 +":"+m._2 )}//获取星座def getConstellation(month : Integer, day:Integer) : String = {  if(day < dayArr(month - 1)) constellationArr(month - 1) else constellationArr(month)}
}

运行结果:

任务结束,耗时:12589ms
巨蟹座:1722834
射手座:1610733
双鱼座:1777411
白羊座:1610940
处女座:1668062
双子座:1721596
金牛座:1720431
狮子座:1665213
天秤座:1722568
水瓶座:1613145
天蝎座:1612089
摩羯座:1554978

后记:

初学spark,前面踩了些坑。例如,如果在操作数据的时候,如果不注重运行效率。会导致程序跑很久。
例如我最开始生成的模拟数据是json格式的。在操作数据的时候使用scala api将json转成对象取值。

效率差到不行。仅仅200W数据就要跑313秒,引以为戒。

初探Spark-使用大数据分析2000W行数据相关推荐

  1. 企业使用大数据分析有什么好处

    现在技术的创新改变了大数据的规则,先进的软件系统大大缩短了分析时间,使公司能够做出快速决策,从而有助于增加收入,降低成本并促进增长.这为能够更快地工作并更有效地瞄准消费者的品牌提供了竞争优势. 如果您 ...

  2. 单表最大2000W行数据

    尺有所短,寸有所长:不忘初心,方得始终. 在互联网技术圈中有一个说法:MySQL 单表数据量大于 2000 W行,性能会明显下降.网传这个说法最早由百度传出,真假不得而知.但是却成为了行业内一个默认的 ...

  3. 使用大数据分析需要注意什么因素

    现在是大数据时代,大数据无处不在,世界上大多数组织都在使用.虽然完全同化还存在一些障碍,但这些障碍主要与"如何"而不是"为什么"有关.长期以来,人们一直认为企业 ...

  4. 使用大数据分析需避免哪些错误

    在最新技术的帮助下,各种规模的组织都可以获取有关其运营和客户的丰富,细致的信息,这对他们而言是至关重要的重要资源.但是,对于组织而言,了解如何管理庞大的数据量可能既麻烦又昂贵,即使使用了可用的正确工具 ...

  5. 明略数据:用大数据分析找出数据间隐藏的关联性

    ZD至顶网CIO与应用频道 12月11日 人物访谈(文/孙博): 智能穿戴设备监测健康.城市交通和天气的观测.抓捕罪犯.金融监管--伴随着大数据呈现出无孔不入的趋势,大数据分析开始成为人类进行科学决策 ...

  6. 使用大数据分析建立电力企业用户画像的一种思路

    为什么要建立企业用户画像 电能作为新能源的主要转化对象,在低碳.环保方面较其他化石能源具有先天优势,"煤改电"是低碳与保护生态环境战略的长远趋势.但从短期看,煤改电带来的经济负担较 ...

  7. 什么是大数据公司面临的问题以及如何使用大数据解决

    Heyy EveryOne ..!! 大家好.. !! In this article, you will come to know- what is Hadoop, Big Data & D ...

  8. 怎么使用大疆无人机建模?

    倾斜摄影测量技术是国际测绘遥感领域近年发展起来的一项高新技术,以大范围.高精度.高清晰的方式全面感知复杂场景,通过高效的数据采集设备及专业的数据处理流程生成的数据成果直观反映地物的外观.位置.高度等属 ...

  9. 冷热分离和直接使用大数据库_中台有“数”:大数据技术为苏宁818保驾护航

    今年818正值苏宁成立30周年之际,苏宁易购提出了"专注好服务"的全新品牌主张,在带来巨大流量的同时,也给苏宁中台系统的保障工作带来了更大的挑战.如何在818大促中,快速.高效.智 ...

最新文章

  1. python3-pwntools教程_python的pwntools工具的日常使用
  2. 卷积神经网络鼻祖LeNet网络分析
  3. bios设置_老富士通bios设置启动项方法是什么 富士通bios设置u盘启动的方法
  4. 《慕课React入门》总结
  5. EOS经济系统分析[转载]
  6. 网络编程知识预备(1) ——了解OSI网络模型
  7. python pip install pil_解决python的pip install PIL失败问题
  8. Docker入门之常用命令
  9. linq group by 多个字段取值以及取出重复的数据
  10. Atitit spring 3.0 3.1 3.2 4.0 4.3 5.0 新特性
  11. SAP ABAP Development Tool 如何设置黑色主题
  12. 域名被污染解决方法及DNS污染清洗方法
  13. 11.8版本更新公告:灵罗娃娃 格温登场
  14. 如何用PPT编制方案 (6)PPT完成度的自检表
  15. 学习笔记(02):学校网管员培训视频教程-三层组网模型
  16. MATLAB实现智能计算方法实验汇总
  17. 央视曝光网络消费陷阱 钓鱼网站变身成公众号骗取钱财
  18. 【PC工具】白领办公必备,电脑定时提醒休息护眼软件:眼睛护士
  19. java八种包装类_Java 八种基本类型包装类
  20. JavaWeb 入门

热门文章

  1. 电脑箭头,电脑箭头符号怎么打出来(往返箭头符号图案)
  2. 网站快速通过ICP备案的方法!
  3. 2 javascript视频教程 变量和数据类型
  4. GTJ2018如何导出全部工程量_广联达GCCP5.0和GTJ2018软件新版发版通知
  5. Android中动态改变布局中控件的位置
  6. Movist Pro for Mac(Mac视频播放器)
  7. android p音量插件,安卓p音量条v1.9.2
  8. 学习记录:python pygame 飞机
  9. MATLAB-fsolve函数帮助文档翻译与补充
  10. Java后台拦截淘宝口令并解析淘口令里面特殊字符的正则