Spark之 使用SparkSql操作mysql和DataFrame的Scala实现
通过读取文件转换成DataFrame数据写入到mysql中
package com.zy.sparksql import java.util.Properties import org.apache.spark.SparkContext
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
import org.apache.spark.sql.types.{IntegerType, StringType, StructType} /**
* 通过读取文件转换成DataFrame数据写入到mysql中
*/
object SparkSqlToMysql {
def main(args: Array[String]): Unit = {
//创建sparkSession
val sparkSession: SparkSession = SparkSession.builder().appName("SparkSqlToMysql").master("local").getOrCreate()
//读取数据
val sc: SparkContext = sparkSession.sparkContext
val fileRDD: RDD[String] = sc.textFile("D:\\person.txt")
//切分
val lineRDD: RDD[Array[String]] = fileRDD.map(_.split(",")) //关联 通过StructType指定schema将rdd转换成DataFrame
val rowRDD: RDD[Row] = lineRDD.map(x => Row(x(0).toInt, x(1), x(2).toInt))
val schema = (new StructType).add("id", IntegerType, true).add("name", StringType, true).add("age", IntegerType, true)
//根据rdd和schema创建DataFrame
val personDF: DataFrame = sparkSession.createDataFrame(rowRDD, schema) //将df注册成表
personDF.createOrReplaceTempView("person") //操作表
val resultDF: DataFrame = sparkSession.sql("select * from person order by age desc") //将数据存到mysql中
//创建properties对象 设置连接mysql的信息
val prop: Properties = new Properties()
prop.setProperty("user", "root")
prop.setProperty("password", "root") /** mode方法可以指定数据插入模式
* overwrite:覆盖,覆盖表中已经存在的数据,如果表不存在它会事先帮你创建
* append:追加,向表中追加数据,如果表不存在它会事先帮你创建
* ignore:忽略,表示如果表事先存在,就不进行任何操作
* error :如果表存在就报错,它是默认选项
*/
resultDF.write.mode("error").jdbc("jdbc:mysql://192.168.44.31:3306/spark", "person", prop) sparkSession.stop()
}
}
从mysql中读取数据到DataFrame中
package com.zy.sparksql
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
/**
  * 从mysql中读取数据到DataFrame中
  */
object DataFromMysql {
  def main(args: Array[String]): Unit = {
    //创建sparkSession
    val sparkSession: SparkSession = SparkSession.builder().appName("DataFromMysql").master("local").getOrCreate()
    //创建properties对象 设置连接mysql的信息
    val prop: Properties = new Properties()
    prop.setProperty("user", "root")
    prop.setProperty("password", "root")
    //读取mysql数据
    val mysqlDF: DataFrame = sparkSession.read.jdbc("jdbc:mysql://192.168.44.31:3306/spark", "person", prop)
    mysqlDF.show()
    sparkSession.stop()
  }
}
Spark之 使用SparkSql操作mysql和DataFrame的Scala实现的更多相关文章
- 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式
		
一.前述 1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...
 - Spark之 使用SparkSql操作Hive的Scala程序实现
		
依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...
 - Spark记录-SparkSQL远程操作MySQL和ORACLE
		
1.项目引入mysql和oracle驱动 2.将mysql和oracle驱动上传到hdfs 3.远程调试源代码如下: import org.apache.spark.sql.SQLContext im ...
 - 在spark中操作mysql数据 ---- spark学习之七
		
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
 - Spark操作MySQL,Hive并写入MySQL数据库
		
最近一个项目,需要操作近70亿数据进行统计分析.如果存入MySQL,很难读取如此大的数据,即使使用搜索引擎,也是非常慢.经过调研决定借助我们公司大数据平台结合Spark技术完成这么大数据量的统计分析. ...
 - [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:
		
[Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...
 - sparksql连接mysql
		
1.方法1:分别将两张表中的数据加载为DataFrame /* * 方法1:分别将两张表中的数据加载为DataFrame * */ /* Map<String,String> option ...
 - JAVA SparkSQL初始和创建DataFrame的几种方式
		
建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述 1.SparkSQ ...
 - sparksql 操作hive
		
写在前面:hive的版本是1.2.1spark的版本是1.6.x http://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive- ...
 
随机推荐
- __all__  作用,  相当于导入*
			
它是一个string元素组成的list变量,定义了当你使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等) 参考文章: http: ...
 - python调用rpc实现分布式系统
			
rpc 一般俗称,远程过程调用,把本地的函数,放到远端去调用. 通常我们调用一个方法,譬如: sumadd(10, 20),sumadd方法的具体实现要么是用户自己定义,要么存在于该语言的库函数中,也 ...
 - tomcat日志分类
			
综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...
 - jdk1.8新特性应用之Iterable
			
我们继续看lambda表达式的应用: public void urlExcuAspect(RpcController controller, Message request, RpcCallback ...
 - Unit07: document 对象 、 自定义对象 、 事件
			
Unit07: document 对象 . 自定义对象 . 事件 知识点: <!DOCTYPE html> <html> <head> <meta chars ...
 - 模仿std::vector写线性表的几点感想
			
数据结构还是很早之前学的了,当时才刚学过C语言,实现得都很简单,最近决定重新打牢基础,于是重新开始实现书上的数据结构和算法. 模仿C++ Primer的StrVec以及std::vector,使用模板 ...
 - Excel信息提取之二
			
Sub 订单归纳() Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet Dim dic1 As Object, dic2 As Obje ...
 - easyui-datebox设置只能选择年月,设置当前月的第一天和最后一天
			
来源:https://www.cnblogs.com/xiaoxiao0314/p/7041731.html 1. 设置只能控件只能显示年月:search_date_monthreport为控件id, ...
 - (转)JavaMail中的Flag(邮件状态)
			
本文转载自:http://blog.csdn.net/chjttony/article/details/6005594 标记邮件就是把邮件标记为已读,删除等操作,需要使用Flags类,它mail.ja ...
 - grep 小技巧
			
转自:http://www.cnblogs.com/itech/archive/2012/10/18/2729944.html 1) grep命令加- E参数,这一扩展允许使用扩展模式匹配.例如,要抽 ...