读取数据库数据和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数据进行处理代码的更多相关文章

  1. Spark SQL读取Oracle的number类型的数据时精度丢失问题

    Spark SQL读取数据Oracle的数据时,发现number类型的字段在读取的时候精度丢失了,使用的spark版本是Spark2.1.0的版本,竟然最后经过排查和网上查资料发现是一个bug.在Sp ...

  2. 编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时会产生Additional information: 阅读器关闭时尝试调用 Read 无效问题,解决方法与解释

    在自学杨中科老师的视频教学时,拓展编写SqlHelper使用,在将ExecuteReader方法封装进而读取数据库中的数据时 会产生Additional information: 阅读器关闭时尝试调用 ...

  3. sql server2008数据库复制实现数据同步常见问题

    sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...

  4. spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案

    1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...

  5. sql server 数据库复制实现数据同步常见问题(不定期更新)

    sql server2008数据库复制实现数据同步常见问题 在原作者基础上追加 sql server2008数据库复制实现数据同步常见问题 23.发布 'xx' 的并发快照不可用,因为该快照尚未完全生 ...

  6. SQL跨数据库复制表数据

    SQL跨数据库复制表数据   不同服务器数据库之间的数据操作 不同数据库之间复制表的数据的方法: 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库.. ...

  7. sql 读取excel中的数据

    select 列名 as 字段名 from openBowSet('MSDASQL.1','driver=Microsoft Excel Driver(*.xls);dbq=文件存放地址','sele ...

  8. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

  9. 用sql删除数据库重复的数据的方法

      /***********************************************两个意义上的重复记录:1.是完全重复的记录,也即所有字段均重复的记录,2.是部分关键字段重复的记录, ...

随机推荐

  1. 目标检测算法SSD在window环境下GPU配置训练自己的数据集

    由于最近想试一下牛掰的目标检测算法SSD.于是乎,自己做了几千张数据(实际只有几百张,利用数据扩充算法比如镜像,噪声,切割,旋转等扩充到了几千张,其实还是很不够).于是在网上找了相关的介绍,自己处理数 ...

  2. Vue2.0 - 自定义指令 vue-directive

    Vue.directive('指令',function(el,binding,vnode){ el.style='color:'+binding.value;}); el : 指令所绑定的元素,可以用 ...

  3. [LOJ#2326]「清华集训 2017」简单数据结构

    [LOJ#2326]「清华集训 2017」简单数据结构 试题描述 参加完IOI2018之后就是姚班面试.而你,由于讨厌物理.并且想成为乔布斯一样的创业家,被成功踢回贵系. 转眼,时间的指针被指向201 ...

  4. [hdu5307] He is Flying [FFT+数学推导]

    题面 传送门 思路 看到这道题,我的第一想法是前缀和瞎搞,说不定能$O\left(n\right)$? 事实证明我的确是瞎扯...... 题目中的提示 这道题的数据中告诉了我们: $sum\left( ...

  5. [暑假集训--数论]poj2142 The Balance

    Ms. Iyo Kiffa-Australis has a balance and only two kinds of weights to measure a dose of medicine. F ...

  6. [暑假集训--数论]poj2773 Happy 2006

    Two positive integers are said to be relatively prime to each other if the Great Common Divisor (GCD ...

  7. 《插件》一个比较好用的 chrome浏览器的json格式化插件

    插件名: JSON-Handle   下载地址:         http://jsonhandle.sinaapp.com/ 插件下载后,在浏览器输入:chrome://extensions/ 将下 ...

  8. 大楼(bzoj 2165)

    Description xz是一个旅游爱好者,这次他来到了一座新的城市.城市中央有一幢高耸入云的大楼.这幢楼到底有多少层呢?据说和非负整数的个数是一样多的.xz想爬上这座大楼来观赏新城市的全景.这幢大 ...

  9. 虚拟 ​router 原理分析

    上一节我们创建了虚拟路由器“router_100_101”,并通过 ping 验证了 vlan100 和 vlan101 已经连通. 本节将重点分析其中的原理. 首先我们查看控制节点的 linux b ...

  10. HDU3001 Travelling

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...