SPark SQL 从 DB 读取数据方法和方式 scala
来源:互联网 发布:java用两个栈实现队列 编辑:程序博客网 时间:2024/06/14 08:33
import org.apache.spark.sql.SQLContextimport org.apache.spark.SparkConfimport org.apache.spark.SparkContextimport java.util.HashMapimport org.apache.spark.sql.Rowimport org.apache.spark.sql.DataFrameimport org.apache.spark.sql.types.DataTypesimport java.util.ArrayListimport org.apache.spark.sql.types.StructTypeimport org.apache.spark.sql.types.StructFieldimport org.apache.spark.sql.DataFrameimport org.apache.spark.sql.DataFrameimport com.mysql.jdbc.Connectionimport com.mysql.jdbc.Statementimport java.sql.DriverManager/** * @author three */object JDBCDataSource{ def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("JDBCDataSource").setMaster("local[1]") val sc = new SparkContext(conf) val sqlContext = new SQLContext(sc) var options = new HashMap[String, String](); options.put("url", "jdbc:mysql://192.168.5.111:3306/testdb"); options.put("user", "spark"); options.put("password", "spark2016"); options.put("dbtable", "student_info"); var studentInfosDF = sqlContext.read.format("jdbc").options(options).load() options.put("dbtable", "student_score"); var studentScoresDF = sqlContext.read.format("jdbc").options(options).load() // 将两个DataFrame转换成JavePairRDD,进行join操作 //需要有相同的key 做join var rdd1 = studentInfosDF.map(x => (x.getString(0), x.getInt(1))) var rdd2 = studentScoresDF.map(x => (x.getString(0), x.getInt(1))) var studentsRDD = rdd1.join(rdd2) // 将JavaPairRDD转换为JavaRDD<Row> var studentRowsRDD = studentsRDD.map(x => (x._1, x._2._1.toInt, x._2._2.toInt)) var filteredStudentRowsRDD = studentRowsRDD.filter(_._3 > 80).map(x => (Row(x._1, x._2.toInt, x._3.toInt))) // 继续转换为DataFrame var structFields = new ArrayList[StructField](); structFields.add(DataTypes.createStructField("name", DataTypes.StringType, true)); structFields.add(DataTypes.createStructField("age", DataTypes.IntegerType, true)); structFields.add(DataTypes.createStructField("score", DataTypes.IntegerType, true)); var structType = DataTypes.createStructType(structFields); var studentsDF = sqlContext.createDataFrame(filteredStudentRowsRDD, structType); var rows = studentsDF.collect(); for (row <- rows) { println(row); } // 将DataFrame数据保存到MySQL表中 studentsDF.foreach { row => { var sql = "insert into good_student_info values(".+("'").+(row.getString(0)).+("',").+(row.getInt(1)).+(",").+(row.getInt(2)).+(")") //println(sql) Class.forName("com.mysql.jdbc.Driver"); var conn = DriverManager.getConnection("jdbc:mysql://192.168.5.111:3306/testdb", "spark", "spark2016"); var stat = conn.createStatement(); stat.executeUpdate(sql); if (stat != null) { stat.close(); } if (conn != null) { conn.close(); } } } }}
0 0
- SPark SQL 从 DB 读取数据方法和方式 scala
- SPark SQL 从 DB 读取数据方法和方式
- 从HBase数据库表中读取数据动态转为DataFrame格式,方便后续用Spark SQL操作(scala实现)
- DB——数据的读取和存储方式
- DB——数据的读取和存储方式
- DB——数据的读取和存储方式
- Spark支持四种方式从数据库中读取数据
- spark使用scala读取Avro数据
- SQL Server中从Excel中读取数据的方法
- Spark从外部读取数据之textFile
- Spark从外部读取数据之wholeTextFiles
- Spark从s3中读取数据
- Spark从外部读取数据之textFile
- Spark从外部读取数据之textFile
- Spark批量读取Redis数据-Pipeline(Scala)
- spark:scala读取mysql的4种方法
- 【spark】使用scala读取项目中的文件的方法
- [spark]spark读取postgresql的表(纯SQL方式)
- 移动嵌入式开发概述
- Codeforces - 133B - Unary (水题)
- CommVault v11新特性和战略解读
- python查找列表中的最大值
- Android多媒体开发(一)----MediaPlayer框架开始
- SPark SQL 从 DB 读取数据方法和方式 scala
- ZOJ3164【背包问题(好题)】
- A+B for Matrices
- 用Android Studio读Android源码
- DES加密算法
- 基于Spark的FPGrowth算法的运用
- Http协议(图解http读书笔记)
- 数组和指针的比较和关系以及区别
- 人工智能“六步走”学习路线