spark-helloword

作者: Wu杰语 | 来源:发表于2021-11-21 16:17 被阅读0次

    大数据看了一段时间,发现大数据是架构学习一个必须学习的领域。大数据是面向数字化领域的基础设施,底层是分布式为基础,或者说分布式为本质;是一种不同的思维模式,有自己的理论基础和发展脉络,典型的如Google的三架马车论文,每个经典的开源组件下都有若干理论论文支撑;大数据是个庞大的技术栈,开源组件中提供了对于人工智能等前沿的支撑。需要开始学习,长远积累。

    spark和flink是两个经典的大数据流批一体框架,先选择spark,因为spark的领域更早,上手更简单。现在先从helloworld入手

    安装

    选择的unbuntu系统,安装java和scala,因为spark是用scala编写的,所以要安装好scala的环境。

    sudo apt install openjdk-11-jre-headless
    sudo apt install scala
    

    然后到spark官网下载
    http://spark.apache.org/downloads.html
    到本地解压设置环境变量

    tar -zxvf spark-3.2.0-bin-hadoop3.2.tgz
    

    设置环境变量spark安装目录下的bin目录到.prifile,执行source .proile让设置生效

    spark-shell --version
    

    检查是否安装好

    helloworld的例子

    准备一个文件,随意一个英文文章就可以
    在spark-shell交互界面下输入脚本代码

    import org.apache.spark.rdd.RDD
    val file: String = s"/temp/test.txt"
     
    // 读取文件内容
    val lineRDD: RDD[String] = spark.sparkContext.textFile(file)
     
    // 以行为单位做分词
    val wordRDD: RDD[String] = lineRDD.flatMap(line => line.split(" "))
    val cleanWordRDD: RDD[String] = wordRDD.filter(word => !word.equals(""))
     
    // 把RDD元素转换为(Key,Value)的形式
    val kvRDD: RDD[(String, Int)] = cleanWordRDD.map(word => (word, 1))
    // 按照单词做分组计数
    val wordCounts: RDD[(String, Int)] = kvRDD.reduceByKey((x, y) => x + y)
     
    // 打印词频最高的5个词汇
    wordCounts.map{case (k, v) => (v, k)}.sortByKey(false).take(5)
    

    如上代码看起来非常眼熟,在erlang学习的时候学习函数式编程,最经典的三件套是 map/filter/falt,这里的代码就和函数式的界面接口一样,非常简单易懂。

    这个代码使用的是Spark RDD的API,这里RDD是一个数据集操作的抽象,按照函数式的理解,这些flatmap、filter、map、reduceByKey每个操作返回的都是一个高阶函数,都没有发生真正的计算,只有最后一步take的时候真正发生计算。

    小结

    一个spark的helloword还是非常简单,但是要学习的内容还非常多,特别是虽然这里封装了非常简单易用的接口,但是接口低下的分布式计算怎么发生的?还有那些其它原理,值得好好探究学习。

    相关文章

      网友评论

        本文标题:spark-helloword

        本文链接:https://www.haomeiwen.com/subject/dnfmtrtx.html