Spark sql读取数据库和ES数据进行处理代码
读取数据库数据和ElasticSearch数据进行连接处理
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SQLContext; import com.dinpay.bdp.rcp.domain.FlowMain;
import com.dinpay.bdp.rcp.util.CodisUtil;
import com.dinpay.bdp.rcp.util.Constant;
import com.google.gson.Gson; import redis.clients.jedis.Jedis; /**
* 首页的数据,定时Job定时刷新
*/
public class MainFlowProcedure{
private static Logger logger = Logger.getLogger(MainFlowProcedure.class.getSimpleName()); public static void main(String[] args) { //屏蔽日志
Logger.getLogger("org.apache.spark").setLevel(Level.WARN); //配置SparkConf
SparkConf conf = new SparkConf().setAppName("MainFlowProcedure").setMaster("local[2]");
JavaSparkContext sc =new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc); registerTable(sqlContext,"t_sys_attention_library");
registerTable(sqlContext,"t_sys_big_order");
registerTable(sqlContext,"t_sys_doubtful_order");
registerTable(sqlContext,"t_rc_event");
registerESTable(sqlContext, "t_order"); sqlContext.sql("select merchant_id,count(order_id) as txcnt ,sum(tx_money) as txamount from t_order group by merchant_id")
.registerTempTable("t_order_merchant"); sqlContext.sql("select t2.merchant_id,count(t1.order_id) as bigcnt from t_sys_big_order t1 join t_order t2 on t1.order_id = t2.order_id group by t2.merchant_id")
.registerTempTable("t_big_merchant"); sqlContext.sql("select t2.merchant_id,count(t1.order_id) as dbtcnt from t_sys_doubtful_order t1 join t_order t2 on t1.order_id = t2.order_id group by t2.merchant_id")
.registerTempTable("t_doubt_merchant"); sqlContext.sql("select merchant_id,count(*) as rccnt from t_rc_event group by merchant_id")
.registerTempTable("t_rc_merchant"); sqlContext.sql("select t1.merchant_id,t2.txcnt,t3.dbtcnt,t4.bigcnt,t2.txamount,t5.rccnt from t_sys_attention_library t1 left join t_order_merchant t2 on t1.merchant_id = t2.merchant_id left join t_doubt_merchant t3 on t1.merchant_id = t3.merchant_id left join t_big_merchant t4 on t1.merchant_id = t4.merchant_id left join t_rc_merchant t5 on t1.merchant_id = t5.merchant_id")
.registerTempTable("t_attention");
//生成结果集
DataFrame resultDF =sqlContext.sql("select t.merchant_id,t.txcnt,t.dbtcnt,t.bigcnt,t.txamount,t.rccnt from t_attention t"); List<FlowMain> flowMains = resultDF.javaRDD().map(new Function<Row,FlowMain>(){public FlowMain call(Row row){
FlowMain flowMain = new FlowMain();
flowMain.setMerchantId(row.getString(0));
flowMain.setTxCnt(row.isNullAt(1)?0:row.getInt(1));
flowMain.setSuspectCnt(row.isNullAt(2)?0:row.getInt(2));
flowMain.setBigAmountCnt(row.isNullAt(3)?0:row.getInt(3));
flowMain.setTxAmount(row.isNullAt(4)?0.0:row.getDouble(4));
flowMain.setTxRate("偏高");
flowMain.setRcEventCnt(row.isNullAt(5)?0:row.getInt(5));
return flowMain;
}
}).collect(); Gson gson = new Gson();
String res = gson.toJson(flowMains);
//连接codis进行操作,每次将新生成的数据,放到对应的key中
Jedis jedis = CodisUtil.getJedis() ;
jedis.set("mainFlow", res);
logger.info("插入到Codis数据完成!!!");
sc.stop();
} //获取数据库的表注册为临时表
private static void registerTable(SQLContext sqlContext,String dbtable){
Map<String,String> mcOptions =new HashMap<String, String>();
mcOptions.put("url", Constant.URL);
mcOptions.put("driver", Constant.DRIVER);
mcOptions.put("dbtable", dbtable);
mcOptions.put("user", Constant.USER);
mcOptions.put("password", Constant.PASSWD);
DataFrame jdbcDF = sqlContext.read().format("jdbc").options(mcOptions).load();
jdbcDF.registerTempTable(dbtable);
} //获取ElasticSearch中的索引注册为表
private static void registerESTable(SQLContext sqlContext,String index){
Map<String,String> esOptions =new HashMap<String, String>();
esOptions.put("es.nodes", Constant.ESNODES);
esOptions.put("es.port", Constant.ESPORT);
esOptions.put("es.index.auto.create", "true"); DataFrame OrderDF = sqlContext.read().format("org.elasticsearch.spark.sql")
.options(esOptions)
.load(index+"/"+index);
OrderDF.registerTempTable(index);
} }
Spark sql读取数据库和ES数据进行处理代码的更多相关文章
- Spark SQL读取Oracle的number类型的数据时精度丢失问题
Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...
- 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释
在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...
- sql server2008数据库复制实现数据同步常见问题
sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...
- spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案
1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...
- sql server 数据库复制实现数据同步常见问题(不定期更新)
sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...
- SQL跨数据库复制表数据
SQL跨数据库复制表数据 不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...
- sql 读取excel中的数据
select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...
- C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]
C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...
- 用sql删除数据库重复的数据的方法
/***********************************************两个意义上的重复记录:1.是完全重复的记录,也即所有字段均重复的记录,2.是部分关键字段重复的记录, ...
随机推荐
- Halcon11 Linux 下载
Halcon11 Linux下载地址:http://www.211xun.com/download_page_3.html HALCON 11 是一套机器视觉图像处理库,由一千多个算子以及底层的数据管 ...
- jsp中/el表达式中将后台传来的时间戳格式化为年月日时分秒
sp中/el表达式中将后台传来的时间戳格式化为年月日时分秒1.引入相关标签库 <%@taglib prefix="c" uri="http://java.sun.c ...
- leetcode NO.1 两数之和 (python实现)
来源 https://leetcode-cn.com/problems/two-sum/description/ 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个 ...
- 获取完整的URL request.getQueryString()
public String codeToString(String str) { String strString = str; try { byte tempB[] = strString.getB ...
- python发送给邮件 转
这里用到了Python的两个包来发送邮件: smtplib 和 email . Python 的 email 模块里包含了许多实用的邮件格式设置函数,可以用来创建邮件“包裹”.使用的 MIMEText ...
- web自动化测试:watir+minitest(一)
基本介绍: 本课程的测试环境和工具为:win7+ruby+watir+minitest Watir 全称是"Web Application Testing in Ruby".它是一 ...
- 在smarty模板中使用PHP函数的方法
在smarty模板中如果要在显示的资料使用php函数时,如果是只有一个参数的函数比如说去空白的trim会写成 sample1 代码如下: <{$colname|trim}> 那如果使用像i ...
- BZOJ 2243:染色(树链剖分+区间合并线段树)
[SDOI2011]染色Description给定一棵有n个节点的无根树和m个操作,操作有2类:1.将节点a到节点b路径上所有点都染成颜色c:2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认 ...
- 【bzoj4439】[Swerc2015]Landscaping 网络流最小割
题目描述 FJ有一块N*M的矩形田地,有两种地形高地(用‘#’表示)和低地(用‘.’表示) FJ需要对每一行田地从左到右完整开收割机走到头,再对每一列从上到下完整走到头,如下图所示 对于一个4*4的田 ...
- 《插件》一个比较好用的 chrome浏览器的json格式化插件
插件名: JSON-Handle 下载地址: http://jsonhandle.sinaapp.com/ 插件下载后,在浏览器输入:chrome://extensions/ 将下 ...