DataFrame读写Mysql数据以及Spark Streaming相关知识

DataFrame读写Mysql数据
import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row

object exercise{
          def main(args:Array[String]){
            
                val pRDD = spark.sparkContext.parallelize(Array("3,Mary,F,26","4,Tom,M,23")).map(_.split(" "))
                 //设置的两条信息
                val schema = StructType(List(StructField("id",IntegerType,true),StructField("name",StringType,true),StructField("gender",StringType,true),StructField("age",IntegerType,true)))
                 //设置模式的信息(表头)
                val rowRDD = pRDD.map(p=> Row(p(0).toInt,p(1).trim,p(2).trim,p(3).toInt))
                 //创建ROW对象,每一个row对象都是rowRDD中的一行
                 val studentDF = spark.createDataFrame(rowRDD,schema)
                  //建立起Row对象和模式之间的对应关系,把数据和模式对应起来
                  val prop=new Properties()
                  //创建prop变量保存JDBC连接参数
                   prop.put("user","root")
                   prop.put("password","hadoop")
                   prop.put("driver","com.mysql.jdbc.Driver")
                   studentDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/sparktest", "spark.employee", prop)
                   val jdbcDF = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/sparktest").option("driver","com.mysql.jdbc.Driver").optio n("dbtable","employee").option("user","root").option("password", "hadoop").load() 
                   jdbcDF.agg("age" -> "max", "age" -> "sum")   

}




}

  

 
 
流计算:
1.数据分为:静态数据和流数据,静态数据计算模式:批量计算  流数据计算模式:实时计算
2.基本理念:数据的价值随着时间的流逝而降低
3.对于一个流计算系统来说,它应达到如下需求:
* ? 高性能。处理大数据的基本要求,如每秒处理几十万条数据。
* ? 海量式。支持TB级甚至是PB级的数据规模。
* ? 实时性。必须保证一个较低的延迟时间,达到秒级别,甚至是毫秒级别。
* ? 分布式。支持大数据的基本架构,必须能够平滑扩展。
* ? 易用性。能够快速进行开发和部署。
* ? 可靠性。能可靠地处理流数据。
4.流计算处理过程:数据实时采集、数据实时计算和实时查询服务
Spark Streaming简介
1.是构建在Spark上的实时计算框架,为spark提供了可扩展、高吞吐、容错的流计算能力
2.可以整合多种数据来源,经过处理的数据可存储至文件系统、数据库或者仪表盘里
3.基本原理:将实时输入数据流以时间片(秒级)为单位进行拆分,然后经Spark引擎以类似批处理的方式处理每个时间片数据
编写Spark Streaming程序的基本步骤是:
 1.通过创建输入DStream来定义输入源
 2.通过对DStream应用转换操作和输出操作来定义流计算。
 3.用streamingContext.start()来开始接收数据和处理流程。
 4.通过streamingContext.awaitTermination()方法来等待处理结束(手动结束或因为错误而结束)。
 5.可以通过streamingContext.stop()来手动结束流计算进程。
 
posted on 2020-02-07 17:40  啥123  阅读(456)  评论(0编辑  收藏  举报