• spark-1


    先测试搭好的spark集群:

    本地模式测试:

    在spark的目录下:

    ./bin/run-example SparkPi 10 --master local[2]

    验证成功:

     集群模式 Spark Standalone:

    spark-shell --master yarn-client  集群模式Spark Standalone

    验证成功:

    集群模式 Spark on Yarn集群上yarn-cluster模式:

    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster examples/jars/spark-examples_2.11-2.0.2.jar 10

    实现一个wordcount将文件导入scala中:

    先尝试一下map函数,map不改变数据的结构,但可以对数据进行操作

     相当于对每个值,做了乘2的操作。

     

    用空格分隔

     将每一行用空格做分隔。

     简化,_是通配符,代表每个x

     将map之后的数据打平,等价于 lines.map(x=>x.split(" ")).flatten

    将每个单词后面加一个“1”字符,

     

    groupby操作

    从tuple(forgotten,1)中把第一个单词提出来forgotten作为key,
    把整个tuple作为value,收集到一个list中
    这样对应的value是一个list里面包含所有对应key的tuple
    例:
    _1:forgotten -> _2:List((forgotten,1), (forgotten,1), (forgotten,1))
    整个list大小就是对应key:forgotten出现的次数

     下方的map(x=>(x._1,x._2.length)) 只能用这种形式因为是两个tunple.当中的length也可换成size.

    如果不通过list大小来算具体单词的次数(词频):

    要将map中读的list中的第二个值相加.,也可以把sum改成reduce(_+_)

    reduce(_+_)计算原理:
     List(1, 1, 1) ((1+1)+1)
     sum += x

    按数字反向排序:

    取前三个:

    其他方法:

     

    lines.flatMap(_.split(" "))
        .map((_,1))
        .groupBy(_._1)
        .mapValues(_.size)
    返回的是一个Map(dict),key:单词,value:词频
    
     
    
    lines.flatMap(_.split(" "))
        .map((_,1))
        .groupBy(_._1)
        .mapValues(_.size)
        .toArray
        .sortWith(_._2>_._2)
        .slice(0,10)
    
    
    sortBy(_._2).reverse == sortWith(_._2>_._2)
    _._2表示按照第二个进行排序
    
     

    mkString(拼接字符串)

    正则去取多余的符号

    正则:
    python  import re
    p = r'[0-9]+'
    p.findall(s)这个是一个数组
    p.findall(s)[0]
    
    scala:
    val p = "[0-9]+".r
    val s = "546465sfgidg"
    p.findAllIn(s)是一个迭代器
    p.findAllIn(s).toArray 将迭代器转为数组形式.
    
    p.findAllIn(s).foreach(x=>println(x))
    foreach也是扫一遍数据
    
    p.findAllIn(s).mkString("") #变成字符串
    mkString("[","","]")
    取标点,只取数字和字符
    val p = "[0-9a-zA-Z]+".r
    lines.flatMap(_.split(" "))
        .map(x=>(p.findAllIn(x).mkString(""),1))
        .groupBy(_._1)
        .mapValues(_.size)
        .toArray
        .sortWith(_._2>_._2)
        .slice(0,10)
    
    lines.flatMap(_.split(" ")).map(x=>(p.findAllIn(x).mkString(""),1))

    fold函数:

    def f(){}
    lines.map(f)
        
    a.foldLeft(0)(_+_)
    
    sum = 0
    for i in a:
        sum += i
    return sum
    
    tuple求和
    sum = 0
    for i in a:
        sum += i[1]  #1相当于第二个值,相当于scala中的_.__2
    return sum
    
    a.foldLeft(0)(_+_._2)  #_._2是第二个,0没有变.0相当于sum=0

    map的嵌套操作;

  • 相关阅读:
    SQL——插入数据时,遇上存在的数据
    软件工程——软件设计及设计方法
    踩坑1NIDIA驱动失效简单解决方案:NVIDIASMI has failed because it could‘t communicate with the NVIDIA driver.
    踩坑3ubuntu caffe 环境配置
    5使用lenet5 进行mnist手写字体训练以及预测
    dot” not found in path
    VsCode 配置window编译器cl.exe编译器
    c++ 类模板编程
    踩坑2Ubuntu16.04 安装配置NVIDIA 驱动+CUDA+CUDNN
    1使用anaconda创建一个python2的独立环境
  • 原文地址:https://www.cnblogs.com/taozizainali/p/9016599.html
Copyright © 2020-2023  润新知