zoukankan      html  css  js  c++  java
  • 快速开始使用spark

    1、版本说明

    • 在spark2.0版本以前,spakr编程接口是RDD(Resilient Distributed Dataset,弹性分布式数据集),spark2.0版本即以上,RDD被Dataset取代,Dataset比RDD更为强大,在底层得到了许多优化了。当然2.0+版本仍然支持RDD,但官方建议使用Dataset。

    2、安全

    • spark的安全模式默认是关闭的,这意味着你可能收到攻击。

    3、利用Spark Shell进行交互式数据分析

    • Spark的shell提供了一种学习API的简单方法,以及一种以交互方式分析数据的强大工具。
    • 可以通过使用scala或者python进行编程。
    • 在spark的安装根目录下启动。

    3.1、Scala方式

    启动 
    ./bin/spark-shell
    读取一个文件用来创建一个新的数据集Dataset
    val textFile = spark.read.textFile("README.md")
    
    对数据集进行操作
    textFile.count()
    textFile.first()
    val linesWithSpark = textFile.filter(line => line.contains("Spark"))
    textFile.filter(line => line.contains("Spark")).count()
    

    3.2、python方式

    启动
    ./bin/pyspark
    textFile = spark.read.text("README.md")
    textFile.count()
    textFile.first()
    linesWithSpark = textFile.filter(textFile.value.contains("Spark"))
    textFile.filter(textFile.value.contains("Spark")).count()
    

    4、Dataset的更多操作

    1.查找文件中长度最大的字符串,并返回长度
    textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
    
    2.实现wordcounts
    val wordCounts = textFile.flatMap(line => line.split(" ")).groupByKey(identity).count()
    wordCounts.collect()
    
    

    5、缓存Caching

    • Spark还支持将数据集提取到群集范围的内存缓存中。这在重复访问数据时非常有用,例如查询小的“热”数据集或运行像PageRank这样的迭代算法时。举个简单的例子,让我们标记linesWithSpark要缓存的数据集:
    linesWithSpark.cache()
    linesWithSpark.count()
    

    通过文件运行

    • 新建一个SimpleApp.scala
    /* SimpleApp.scala */
    import org.apache.spark.sql.SparkSession
    
    object SimpleApp {
      def main(args: Array[String]) {
        val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
        val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
        val logData = spark.read.textFile(logFile).cache()
        val numAs = logData.filter(line => line.contains("a")).count()
        val numBs = logData.filter(line => line.contains("b")).count()
        println(s"Lines with a: $numAs, Lines with b: $numBs")
        spark.stop()
      }
    }
    
    • 运行结果
      image.png
  • 相关阅读:
    各个地区2.4G及5G信道一览表 [转]
    nf_conntrack
    串口 属性 设置 termios.h [转载&修改]
    802.3 Logical Link Control 协议相关
    HTTP协议中GET、POST和HEAD的介绍[转载]
    Android Shell、SSH、GCC安装与配置
    mybatis中sql语句总结
    [leedcode 128] Longest Consecutive Sequence
    [leedcode 126] Word Ladder
    [leedcode 125] Valid Palindrome
  • 原文地址:https://www.cnblogs.com/twodoge/p/10741446.html
Copyright © 2011-2022 走看看