通过读取文件转换成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实现的更多相关文章

  1. 【Spark篇】---SparkSQL初始和创建DataFrame的几种方式

    一.前述       1.SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原 ...

  2. Spark之 使用SparkSql操作Hive的Scala程序实现

    依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-hive_2 ...

  3. Spark记录-SparkSQL远程操作MySQL和ORACLE

    1.项目引入mysql和oracle驱动 2.将mysql和oracle驱动上传到hdfs 3.远程调试源代码如下: import org.apache.spark.sql.SQLContext im ...

  4. 在spark中操作mysql数据 ---- spark学习之七

    使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...

  5. Spark操作MySQL,Hive并写入MySQL数据库

    最近一个项目,需要操作近70亿数据进行统计分析.如果存入MySQL,很难读取如此大的数据,即使使用搜索引擎,也是非常慢.经过调研决定借助我们公司大数据平台结合Spark技术完成这么大数据量的统计分析. ...

  6. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

    [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...

  7. sparksql连接mysql

    1.方法1:分别将两张表中的数据加载为DataFrame /* * 方法1:分别将两张表中的数据加载为DataFrame * */ /* Map<String,String> option ...

  8. JAVA SparkSQL初始和创建DataFrame的几种方式

    建议参考SparkSQL官方文档:http://spark.apache.org/docs/latest/sql-programming-guide.html 一.前述       1.SparkSQ ...

  9. sparksql 操作hive

    写在前面:hive的版本是1.2.1spark的版本是1.6.x http://spark.apache.org/docs/1.6.1/sql-programming-guide.html#hive- ...

随机推荐

  1. 开发中常见的ES6语句

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. oracle数据库存储过程分页

    CREATE OR REPLACE PROCEDURE prc_query (p_tableName in varchar2, --表名 p_columnNames in varchar2, --字段 ...

  3. 读懂IL代码就这么简单 ---- IL系列文章

    读懂IL代码就这么简单 (一) 读懂IL代码就这么简单(二) 读懂IL代码就这么简单(三)完结篇 出处:http://www.cnblogs.com/zery/tag/IL%20%E7%B3%BB%E ...

  4. c++深拷贝/浅拷贝

    拷贝构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化.其唯一的参数(对象的引用)是不可变的(const类型).此函数经常用在函数调用时用户定义类型的值传递及返 ...

  5. 关于ng的过滤器的详细解释angular-filter

    在使用ng框架做项目的时候,我们可能会使用到ng自带的过滤器,来进行数据的筛选 一:ng自带的过滤器:currency ,date,limitTo,lowercase,uppercase,number ...

  6. sqlserver2008事务日志已满

    --将数据库设为简单模式.日志文件自动断开. alter database CustomerInfoProject set recovery simple --查看日志文件状况  use Custom ...

  7. 【STL源码学习】std::list类的类型别名分析

    有了点模板元编程的traits基础,看STL源码清晰多了,以前看源码的时候总被各种各样的typedef给折腾得看不下去, 将<list>头文件的类继承结构简化如下 #include < ...

  8. MFC消息循环

    MFC消息循环 MFC应用程序中处理消息的顺序 1.AfxWndProc()  该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc. 2.AfxCallWndProc ...

  9. es6 一些小知识

    本人最近被es6感兴趣了,学习一些,以下就是自己总结的一些小知识 1.当你在百度输入"es6"关键字,点击进入es6入门,首先你需要知道怎样学习的顺序,先看第21章Module语法 ...

  10. HDU2546题解

    解题思路:先对价格排序(顺序或倒序都可以),然后,对前n-1(从1开始.排序方式为顺序)做容量为m(卡上余额)-5的01背包(背包体积和价值相等).假设dp[i][j]表示从前i个背包中挑选体积不超过 ...