作者回复: 赞👍,Perfect! 可以作为Python标杆代码,供后续同学参考~
作者回复: 好问题,Hadoop的范畴可大可小。 往小了说,Hadoop特指HDFS、YARN、MapReduce这三个组件,他们分别是Hadoop分布式文件系统、分布式任务调度框架、分布式计算引擎。 往大了说,Hadoop生态包含所有由这3个组件衍生出的大数据产品,如Hive、Hbase、Pig、Sqoop,等等。 Spark和Hadoop的关系,是共生共赢的关系。Spark的定位是分布式计算引擎,因此,它的直接“竞争对手”,是MapReduce,也就是Hadoop的分布式计算引擎。Spark是内存计算引擎,而MapReduce在计算的过程中,需要频繁落盘,因此,一般来说,相比MapReduce,Spark在执行性能上,更胜一筹。 对于HDFS、YARN,Spark可与之完美结合,实际上,在很多的使用场景中,Spark的数据源往往存储于HDFS,而YARN是Spark重要的资源调度框架之一。 大体上是这些,当然,还可以说的更细,老弟可以继续在后台留言,我们继续讨论~
作者回复: Scala语法确实比较灵活,一般来说,简单表达式用(),复杂表达式用{}。 比如,简单函数体:(x => x + 1)、(_ + 1),等等; 复杂函数体:{case x: String => “一大堆关于x的转换” } 关于最后的问题,也就是Scala也可以实现Word Count,和Spark有什么区别。这个问题比较重要,老弟需要用心听一下~ 其实,任何一种语言,都可以实现任何计算逻辑,毕竟是高级编程语言,基本上都是图灵完备的。所以说像word count这种非常简单的逻辑,不只是scala,其他语言都能搞定。但是,Scala也好、Java也罢,再或者是Python,他们实现的word count,只能在单机跑,而Spark实现的Word Count,是在分布式环境跑。这,是本质的区别。 Spark,最核心的能力,就是分布式计算,利用大规模集群的能力。这是最本质的区别。 比如,现在有2万亿行的文本,需要你计算word count,你用scala也能在单机实现,但是,这个word count只能在单机跑,对于一般的机器,大概率是跑不动的。 可是,在分布式集群中,这样的量级,就轻松得多了。Spark,更多的,是提供一种分布式计算的能力,它提供给开发者简单的开发API,让开发者可以像开发单机应用那样,轻而易举地开发分布式应用,让分布式计算对于开发者来说,变得透明。开发者只需要关注业务逻辑,或者说计算逻辑,而不必关心分布式系统底层的调度、分发、数据交换、等等和分布式计算本身有关的东西。 所以说,Scala和Spark,两者没有可比性。当然,除了Spark,现在还有非常多的分布式计算框架,比如MapReduce、Flink、Presto、TensorFlow,等等,大家都是玩分布式计算的,只不过“术业有专攻”,各司其职~
作者回复: 这个是我的锅,哈哈~ 这里是我偷懒了,我应该在这条code上面加个注释,这里“_”(下划线)的意思,是你的文件根目录。Scala里面,用“_”表示一些不重要、不关心的东西,所以我偷用了Scala的“_”。但这里确实会引起困惑,不用管这个,我的锅,用你的文件根目录替换掉这里的“_”就好~
作者回复: 是的,没错~
作者回复: 欢迎~
作者回复: 满分💯,赞👍~
作者回复: Cool~ 后面等专栏更完了,打算把所有Scala代码整理出一份Python版本的,老弟有没有兴趣一起呀~
作者回复: spark-shell中,spark是默认的SparkSession实例,你是在spark-shell中执行这段代码吗?如果是在IDE,需要自己明确定义SparkSession实例的,比如: import org.apache.spark.sql.SparkSession val spark = SparkSession.builder .master("local[2]") .appName("SparkSession Example") .getOrCreate()
作者回复: 赞学习打卡~ 一起加油~