Scala基本算子及数据处理例子

基本方法

  1. .map(x=>(x(1),x(2)))
    • 应用于RDD或Dataset,对集合中的每个元素(假设为数组或类似结构)应用函数,生成一个新的元组,包含原数组的第2个和第3个元素(索引从0开始)。
  2. .select($"id", $"column1.*")
    • 应用于DataFrame,选择名为"id"的列以及名为"column1"的结构体(或DataFrame)中的所有列。
  3. .join(bbb,Seq("SId"),"inner")
    • 应用于DataFrame,将当前DataFrame与名为"bbb"的DataFrame基于"SId"列进行内连接。
  4. .toString 或 .toDouble
    • 这些通常应用于单个值,将值转换为字符串或双精度浮点数。在DataFrame或RDD的上下文中,可能需要结合.map或其他转换函数使用。
  5. .getAs("CId")
    • 应用于Row对象,获取名为"CId"的列的值。
  6. .split(",")
    • 应用于字符串,按逗号分隔字符串,生成一个字符串数组。
  7. .filter(!_.startsWith("sp_id"))
    • 应用于RDD或Dataset中的字符串或可以调用.startsWith方法的对象,过滤掉以"sp_id"开头的元素。注意这里可能是对.filter方法的简化表示,实际使用时需要指定完整的lambda函数。
  8. .map(arr => (arr(2), 1)).reduceByKey(_ + _)
    • 应用于键值对RDD,将每个数组的第3个元素作为键,并将值设为1,然后使用reduceByKey按键聚合值,对相同键的值求和。
  9. .replace("r","")
    • 应用于字符串,将所有"r"字符替换为空字符串,即删除所有"r"字符。
  10. .toDF("id","value")
    • 将RDD或Dataset转换为DataFrame,并指定列名为"id"和"value"。
  11. .printSchema()
    • 应用于DataFrame,打印DataFrame的架构信息,包括列名和类型。
  12. .getString(0)
    • 应用于Row对象,获取索引为0的列的值,并假设它是字符串类型。
  13. .groupBy("register_date")
    • 应用于DataFrame,按"register_date"列的值对DataFrame进行分组。
  14. .map(arr => (arr(2), 1)).reduceByKey(_ + _)
    • 与第8点相同,但上下文可能不同,这里假设是对分组后的结果进行操作。
  15. .map(x=>(x (2),1)).reduce((x,y)=>(x._1,x._4+y._4))
    • 这是一个错误的示例,因为xyreduce函数中通常不包含_4这样的索引(除非xy是某种特定结构的元组,但这里显然不是)。通常,reduce函数会接收两个相同类型的参数,并返回它们的某种聚合结果。
  16. .collect
    • 应用于RDD或Dataset,将分布式数据集合的所有元素收集到驱动程序节点上,作为一个数组返回。
  17. .sortBy
    • 应用于RDD或Dataset,对数据进行排序。通常需要一个排序的键或函数作为参数

 

import org.apache.spark.sql.SparkSession
object aaa {
  def main(args: Array[String]): Unit = {
    val spark=SparkSession.builder().appName("Student")
      .master("local[*]").getOrCreate()
    val Student = DataFrameToMysql.getDataFrameFromMysql(spark, "Student")
    val spark2=SparkSession.builder().appName("SC")
      .master("local[*]").getOrCreate()
    import spark.implicits._
    //   SId ,CId ,score ;
    val SC = DataFrameToMysql.getDataFrameFromMysql(spark2, "SC")
    val aaa=SC.filter(x=>x.getAs("CId")=="01")
    val bbb=SC.filter(x=>x.getAs("CId")=="02")
    val ccc=aaa.join(bbb,Seq("SId"),"inner").toDF("SID","CID1","score1","CID2","score2")
      .filter(x=>x.getAs("score1").toString.toDouble > x.getAs("score2").toString.toDouble).select("SID")
    val ddd=ccc.join(Student,Seq("SId"),"inner").show()
    spark.close()
    spark2.close()
  }
}

package com.ybg

import com.mysql.jdbc.Driver
import org.apache.spark.{SparkConf, SparkContext}

import java.sql.DriverManager

object Warn {
  def main(args: Array[String]): Unit = {
    // 创建SparkConf对象
    val conf = new SparkConf().setMaster("local[*]").setAppName("warning")
    // 创建SparkContext对象
    val spark = SparkContext.getOrCreate(conf)
    // 加载MySQL驱动
    Class.forName("com.mysql.cj.jdbc.Driver")
    // 获取数据库连接
    val connection = DriverManager.getConnection("jdbc:mysql://192.168.152.131:3306/mymac?useSSL=false&allowMultiQueries=true&serverTimezone=Asia/Shanghai", "root", "ok")
    // 定义SQL语句
    val sql = "select * from macthreshold where mactype=? and macpart=?"
    // 读取本地文件
    spark.textFile("d:/mac.txt")
      // 对每一行进行处理
      .map(line=>{
        // 将每一行按逗号分隔
        val infos = line.split(",");
        // 创建PreparedStatement对象
        val pstat = connection.prepareStatement(sql)
        // 设置参数
        pstat.setInt(1,Integer.parseInt(infos(2)))
        pstat.setInt(2,Integer.parseInt(infos(3)))
        // 执行查询
        val rs = pstat.executeQuery()
        // 判断查询结果
        if(rs.next()){
          // 获取温度和振动
          val temp = rs.getInt("temperature")
          val vib = rs.getInt("vibrate")
          // 判断是否正常
          if(temp<=Integer.parseInt(infos(4)) && vib<=Integer.parseInt(infos(5))){
            // 正常
            line+",当前正常"
          }else{
            // 异常
            line+",当前该设备异常"
          }
        }

      }).saveAsTextFile("E:/yuanbenkeji2/123456.txt")

    // 停止SparkContext
    spark.stop()

  }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值