说在前面
这段时间系统学习了spark,跟随靠谱的视频资源学习比从网站蜻蜓点水的搜索及看书都效率高一些。
系统性:书>视频学习>随机搜索 学习难易程度:书>视频学习>随机搜索
视频学习可以在系统性及难易程度取到平衡。找到适合自己技术水平的分享是很重要滴。对于java程序员、hadoop大数据开发来说推荐谷粒学院,我是在bilibili偶然搜到了这个宝藏资源,好多免费的资源。
一年前我接触了mapduce项目,并且逐渐接触到了hdfs、hive、yarn调度调优相关的知识。由于项目忙或者自我驱动力不够一直没有系统学习hadoop生态。最近系统学习了spark视频,竟然还查漏补缺了hadoop相关知识,有点6。学习了以后发现spark生态真的比mapreduce灵活很多,开发者开发spark也是为了弥补mapreduce的不足(spark是内存计算的、有很多transformation/action灵活的方法、是一个大一统的软件栈 从一开始就是为了交互式查询与迭代算法设计的)。为了增加系统性,今天读《spark-快速大数据分析》这本书。本书难易程度:🌟🌟🌟,比较适合初学者或者有一些spark开发经验的同事学习。今天我分享一下这本书前三章的一些Tips。会找一些记忆点来说,而不是啥都梳理哈。
Tips
spark软件栈中所有的程序库与高级组件都可以从下层的改进中收益。
spark本身是scala写的,运行在java虚拟机上。
我是java开发出身,scala语言非常有必要学习(ps:技术学无止境,没有头,您就学吧😂)
spark带有交互式的shell,可以作即时分析。
目前交互式shell支持python与scala,不支持java。学习python的朋友了解的多一些。
spark是惰性执行的。只有第一次在一个行动(action)操作中用到了新的rdd,才会真正计算。
lines =sc.textFile("README.md")
pythonlines=lines.filter(lambda line:"python" in line)
pythonlines.first()
事实上,在first()中,spark只需要扫描文件中直到找到第一个匹配的python的行为,而不需要读取整个文件。(666)
如果想要在多个操作中重复用一个rdd。可以使用rdd.persist()让spark把这个rdd缓存下来。
spark会使用谱系图来记录不同rdd之间的依赖关系。
常见的transformation操作及action操作
1.map() map返回类型不需要和输入类型一样
2.flatmap() 对每个输入元素生成多个输出元素
3.union() 连接rdd
4.distinct()、 intersection()、subtract() 等都需要对数据shuffle 开销很大。
网友评论