spark 分析sql内容再插入到sql表中
package cn.spark.study.core.mycode_dataFrame;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;
import java.sql.Connection;
import java.sql.Statement;
import scala.Tuple2;
public class JDBCDataSource {
	public static void main(String[] args) {
		SparkConf conf = new SparkConf()
		.setAppName("JDBCDataSource")
		.setMaster("local")
		;
		JavaSparkContext sc = new JavaSparkContext(conf);
		SQLContext sqlContext = new SQLContext(sc);
		Map<String,String> options = new HashMap<String,String>();
		options.put("url", "jdbc:mysql://127.0.0.1:3306/testdb");
		options.put("dbtable","student_infos");
		//加载表信息
		DataFrame studentInfosDF = sqlContext.read().format("jdbc")
				.options(options).load();
		options.put("dbtable", "student_scores");
		DataFrame studentScoreDF = sqlContext.read().format("jdbc")
				.options(options).load();
		JavaPairRDD<String, Tuple2<Integer, Integer>> result_RDD = studentInfosDF.javaRDD().mapToPair(new PairFunction<Row, String, Integer>() {
@Override
			public Tuple2<String, Integer> call(Row row) throws Exception {
				return new Tuple2<String, Integer>(row.getString(0),Integer.valueOf(String.valueOf(row.get(1))));
			}
		})
		.join(studentScoreDF.javaRDD().mapToPair(new PairFunction<Row, String, Integer>() {
@Override
			public Tuple2<String, Integer> call(Row row) throws Exception {
				return new Tuple2<String, Integer>(row.getString(0),Integer.valueOf(String.valueOf(row.get(1))));
			}
		}));
//		result_RDD.foreach(new VoidFunction<Tuple2<String,Tuple2<Integer,Integer>>>() {
//			
//			@Override
//			public void call(Tuple2<String, Tuple2<Integer, Integer>> tuple)
//					throws Exception {
//				System.out.println(tuple._1 + ":" + tuple._2._1 + ":" + tuple._2._2);
//			}
//		});
JavaRDD<Row> result_RDD_ROW= result_RDD.map(new Function<Tuple2<String,Tuple2<Integer,Integer>>, Row>() {
			@Override
			public Row call(Tuple2<String, Tuple2<Integer, Integer>> tuple)
					throws Exception {
				return RowFactory.create(tuple._1,tuple._2._1,tuple._2._2);
			}
		});
		List<StructField> list = new ArrayList<StructField>();
		list.add(DataTypes.createStructField("name", DataTypes.StringType, true));
		list.add(DataTypes.createStructField("age", DataTypes.IntegerType, true));
		list.add(DataTypes.createStructField("score", DataTypes.IntegerType, true));
		StructType st = DataTypes.createStructType(list);
		DataFrame result_df = sqlContext.createDataFrame(result_RDD_ROW, st);
		result_df.javaRDD().foreach(new VoidFunction<Row>() {
			private static final long serialVersionUID = 1L;
@Override
			public void call(Row row) throws Exception {
				String sql = "insert into good_student_infos values("
						+ "'" + String.valueOf(row.getString(0)) + "',"
						+ Integer.valueOf(String.valueOf(row.get(1))) + ","
						+ Integer.valueOf(String.valueOf(row.get(2))) + ")";
				System.out.println("sql:" + sql);
				Class.forName("com.mysql.jdbc.Driver");
				Connection conn = null;
				Statement stmt = null;
				try {
					conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/testdb","","");
					stmt = conn.createStatement();
					stmt.execute(sql);
				} catch (Exception e) {
					e.printStackTrace();
				}finally
				{
					if(stmt != null)
					{
						stmt.close();
					}
					if(conn != null)
					{
						conn.close();
					}
				}
			}
		});
	}
}
数据库准备
-- create table student_info(name VARCHAR(20),age INTEGER);
-- create table studnet_scores(name VARCHAR(20),score INTEGER);
-- insert into student_info values("leo",18),("marry",17),("jack",19)
-- insert into student_scores values("leo",88),("marry",99),("jack",60)
-- ALTER TABLE student_info RENAME to student_infos;
-- create table good_student_infos(name VARCHAR(20),age INTEGER,score INTEGER)
最终生成的表

spark 分析sql内容再插入到sql表中的更多相关文章
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
		
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
 - sql语句 怎么从一张表中查询数据插入到另一张表中?
		
sql语句 怎么从一张表中查询数据插入到另一张表中? ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...
 - sql语句,怎么查看一个表中的所有约束
		
sql语句,怎么查看一个表中的所有约束,比如,一个student表,有唯一,外键,主键,用sql语句怎么查看student表中的所有约束呢? select * from sysobjects wher ...
 - 在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键)
		
原文:在论坛中出现的比较难的sql问题:10(删除多表中的同一个外键) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...
 - Mysql 一个表中的数据插入另一个表中
		
两张表的字段一致,并且插入全部数据 INSERT INTO 目标表 SELECT * FROM 来源表 ; 例如,要将 articles 表插入到 newArticles 表中,则可以通过如下 ...
 - 新建表需要原表的数据,mysql 如何把查询到的结果插入到新表中
		
项目运用情景:新建表需要原表的数据 1. 如果两张张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 ...
 - excel to datatable (c#用NPOI将excel文件内容读取到datatable数据表中)
		
将excel文件内容读取到datatable数据表中,支持97-2003和2007两种版本的excel 1.第一种是根据excel文件路径读取excel并返回datatable /// <sum ...
 - CSV文件插入到mysql表中指定列
		
参考资料: -CSV文件插入到mysql表中指定列
 - Oracle 函数 “把当前的用户(审核人,审核通过后)插入到数据表中”
		
create or replace function mcode_apply_update_personnel(p_mca_no VARCHAR2, -- 参数(实参) p_action VARCHA ...
 
随机推荐
- putty基本操作
			
1,进入全屏 标题栏右键,菜单中就有full screen选项. 2,退出全屏 鼠标移到左上角,单击鼠标左键,就会跳出菜单,full screen勾去掉. 3,从putty中复制内容到剪切板 鼠标左键 ...
 - iOS中属性Property的常用关键字的使用说明
			
属性关键字的作用 现在我们iOS开发中,基本都是使用ARC(自动引用计数)技术,来编写我们的代码.因此在属性property中我们经常使用的关键字有strong,weak,assign,copy,no ...
 - 《JAVA学习笔记 (final关键字)》
			
[14-9]面向对象-final关键字 /* 继承的弊端,打破封装性. 不让其他类继承该类,就不会有重写. 怎么能实现呢?通过Java中的一个关键子来实现,final(最终化). [final关键字] ...
 - lightoj1038
			
//Accepted 2860 KB 16 ms //概率 //对于n,假设n变成1的期望步数为p(n) //则p(n)=1/t*sum((1+p(d))) d|n //解得:p(n)=1/(t-1) ...
 - Logger.getLogger()和 LogFactory.getLog()
			
Logger.getLogger()和LogFactory.getLog()的区别: 1.Logger.getLogger()是使用log4j的方式记录日志:2.LogFactory.getLo ...
 - SVG 2D入门4 - 笔画与填充
			
前面我们重点都在总结各类形状,文本和图片,接下来,我们还是和讨论canvas一样,总结一下颜色处理,也就是填充和边框效果:你会发现这里的内容与canvas基本上是一致的.这些属性既可以以属性的形式写在 ...
 - hdoj-2025a
			
#include "stdio.h"#include "string.h"void compare(int n,char s[],char &k);vo ...
 - Objective-c 命名规则
			
1.方法名:第一个单词的首字母用小写,后面的单词首字母要大写<骆驼规则>,例如doSomething . doSomethingElse 2.类名:第一个单词的首字母要求大写,后面的单词首 ...
 - BZOJ1576 (最短路+并查集)
			
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> # ...
 - 重学STM32---(三) 中断分组和优先级
			
看了大半天,终于把原子哥的例程中的中断分组和优先级看懂了,勉勉强强知道了怎么设置中断分组和优先级,,不容易啊.下面就是我收集的资料及我的理解 分组不是很难,就是有一点知道就就全部明白了: // 设置N ...