当前位置:首页 > 后端开发 > 正文内容

Scala操练

邻居的猫1个月前 (12-09)后端开发1360

wordCount

package com.doit.day03

import scala.io.{BufferedSource, Source}

object WordCountDemo {
  def main(args: Array[String]): Unit = {
    //读取文件,获取到一个Source目标
    val source: BufferedSource = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\word.txt")
    //调用getLines办法,获取到每一行数据,每一行数据都放在迭代器中
    val lines: Iterator[String] = source.getLines()
    //假如我现在直接这么回来,他的回来值是什么??   Iterator[String]  ==》 相同的回来一个迭代器,迭代器里边放得是Array[String] 数组里边每一个元素放得都是一个个的单词
    val arrWord: Iterator[Array[String]] = lines.map(line => {
      //1.需要将每一行数据拿出来进行切开,变成一个个的单词
      //hello   hadoop  hive
      val wordsArr: Array[String] = line.split("\\s+")
      wordsArr
    })
    //将迭代器转化成了调集
    val list: List[Array[String]] = arrWord.toList
    //将list中的array压平,这样list装的便是每一个单词了
    val word: List[String] = list.flatten
    //对每一个单词进行分组,相同的单词分在一组,key便是单词,value是一个list,一切相同的单词都放在这个list中
    val wordAndList: Map[String, List[String]] = word.groupBy(word => word)
    //转化,将list转化成长度,长度便是单词的个数
    val wordCount: Map[String, Int] = wordAndList.map(tup => (tup._1, tup._2.size))
    //检查成果
    println(wordCount)
  }
}

均匀温度事例

package com.doit.day03

/**
 * 需求:求最近几天每个城市的均匀温度
 */
object AvgTem {
  def main(args: Array[String]): Unit = {
    val d1 = Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 31.0))
    val d2 = Array(("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3))
    val d3 = Array(("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.0))

    //1.将一切的数据都放在一个数组或许调集中
    val allData: Array[(String, Double)] = d1 ++ d2 ++ d3
    //Array(("beijing", 28.1), ("shanghai", 28.7), ("guangzhou", 32.0), ("shenzhen", 33.1),("beijing", 27.3), ("shanghai", 30.1), ("guangzhou", 33.3),("beijing", 28.2), ("shanghai", 29.1), ("guangzhou", 32.0), ("shenzhen", 32.1))

    //依照城市分组
    val grouped: Map[String, Array[(String, Double)]] = allData.groupBy(tp => tp._1)

    //方法一,获取到一切的温度,sum求和后求均匀
    val res: Map[String, Double] = grouped.map(tp => {
      //数组中每一个元素的key都是相同的,仅仅温度不相同,现在需要将整个数组转化成城市,均匀温度
      val value: Array[(String, Double)] = tp._2
      val avg: Double = value.map(_._2).sum / value.length
      (tp._1, avg)
    })
    println(res)


    //方法二,只对value进行处理
    val res1: Map[String, (String, Double)] = grouped.mapValues(tp => {
      val avg: Double = tp.reduce(_._2 + _._2) / tp.length
      (tp(0)._1, avg)
    })

  }
}

一起老友事例

package com.doit.day03

import scala.io.{BufferedSource, Source}

/**
 * 数据如下  :每个字母代表一个人 ,  计算恣意一个人和其他人的一起老友
 * A:B,C,D,F,E,O
 * B:A,C,E,K
 * C:F,A,D,I
 * D:A,E,F,L
 * E:B,C,D,M,L
 * F:A,B,C,D,E,O,M
 * G:A,C,D,E,F
 * H:A,C,D,E,O
 * I:A,O
 * J:B,O
 * K:A,C,D
 * L:D,E,F
 * M:E,F,G
 * O:A,H,I,J
 */
object SameFriends {
  def main(args: Array[String]): Unit = {
     val lines: Iterator[String] = Source.fromFile("D:\\develop\\ideaWorkSpace\\myself\\study\\scalaDemo\\data\\friends").getLines()
     val myAndFriends: List[(String, Array[String])] = lines.toList.map(line => {
        //        A:B,C,D,F,E,O   :前面的是我自己,:后边的是我的朋友们
        val arr: Array[String] = line.split(":")
        //获取到我自己
        val user: String = arr(0)
        //获取到我的朋友们,朋友们都放在数组里边,里边的元素便是一个个的朋友目标
        val friends: Array[String] = arr(1).split(",")
        (user, friends)
     })

     //获取一起老友。。。
     for(i <- 0 until myAndFriends.length){
        for(j <- i+1 until myAndFriends.length){
           //从第一个元素开端取
           val tuple: (String, Array[String]) = myAndFriends(i)
           val tuple1: (String, Array[String]) = myAndFriends(j)
           //看是不是有一起老友,是不是取交集
           val sameFriends: Array[String] = tuple._2.intersect(tuple1._2)
           println("用户:"+tuple._1+"用户:"+tuple1._1+"的一起老友是:"+sameFriends.mkString(","))
        }
     }
  }
}

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=239

分享给朋友:
返回列表

上一篇:Scala练习题

下一篇:scala反常和IO

“Scala操练” 的相关文章

r语言常用函数,R语言常用函数详解

r语言常用函数,R语言常用函数详解

1. 基本数学运算函数: `sum`: 计算向量、矩阵或数据框中所有元素的总和。 `mean`: 计算向量、矩阵或数据框中所有元素的平均值。 `median`: 计算向量、矩阵或数据框中所有元素的中位数。 `sd`: 计算向量、矩阵或数据框中所有元素的样本标准差。 `v...

r语言聚类分析,方法、实例与技巧

1. Kmeans聚类:Kmeans是最常用的聚类算法之一,它将数据点分为K个簇,其中K是用户指定的。Kmeans的目标是最小化簇内数据点与簇中心之间的距离。2. 层次聚类:层次聚类是一种将数据点逐层合并或分裂的聚类方法。它构建一个树状结构,称为聚类树或树状图,用于表示数据点之间的相似性。3. 密度...

php显示图片, 图片路径处理

php显示图片, 图片路径处理

在PHP中显示图片可以通过多种方式实现,下面我将介绍几种常见的方法:```html``` 2. 使用PHP读取图片并输出如果你想在PHP脚本中动态生成图片或者从数据库中读取图片并显示,你可以使用PHP的文件处理函数来读取图片文件的内容,然后输出它。这里有一个简单的例子:```php// 检查文件是否...

python值得学吗,Python值得学吗?——全面解析Python的学习价值与前景

python值得学吗,Python值得学吗?——全面解析Python的学习价值与前景

学习Python是一个很好的选择,原因如下:1. 广泛的应用领域:Python被广泛应用于数据科学、机器学习、人工智能、Web开发、自动化脚本等多个领域。这使得Python成为多面手,可以应对各种不同的编程需求。2. 简洁的语法:Python以其简洁明了的语法著称,使得它非常适合初学者。其语法接近于...

go2cn购途市场女鞋,GO2.CN购途市场——引领女鞋批发新潮流

go2cn购途市场女鞋,GO2.CN购途市场——引领女鞋批发新潮流

购途网(go2.cn)是一个专注于女鞋批发的B2B贸易信息服务平台,主要面向全国女鞋生产企业、批发商、网络分销商和实体门店等。该平台依托于成都女鞋产业带,提供以下主要服务:1. 女鞋货源信息:购途网汇聚了众多优质女鞋货源,包括来自成都美博城的所有女鞋厂家的货源信息,为采购商提供方便快捷的货源信息展示...

python中的换行符, 换行符的定义

python中的换行符, 换行符的定义

在Python中,换行符主要有两种:1. ``:这是最常见的换行符,用于表示一个新行的开始。当输出字符串时,``会使得输出光标移动到下一行。2. `r`:这种换行符在Windows系统中使用,表示回车符(`r`)和换行符(``)的组合。在Python中,默认情况下,字符串中的``会被解释为换行符。但...