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