Spark sql读取数据库和ES数据进行处理代码
创始人
2024-03-28 13:43:52
0

读取数据库数据和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 flowMains = resultDF.javaRDD().map(new Function(){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 mcOptions =new HashMap();
       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 esOptions =new HashMap();
       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);
   } 
   
}

相关内容

热门资讯

汽车三元催化器怎样区别真假!原... 汽车三元催化器怎样区别真假!原厂的有什么标志?1.三元催化器是安装在汽车排气系统中最重要的机外净化装...
爱的久了会变质吗? 爱的久了会变质吗?其实时间长了不是变质,我感觉应该是升华了!从爱情变成亲情!或者是更依赖对方!那么主...
燕子的习性 燕子的习性燕子以昆虫、植物为食,4月至7月进行繁殖,每当冬季来临时都会进行迁徙。食物:燕子的食物主要...
亚马孙热带雨林中的孙读xun四... 亚马孙热带雨林中的孙读xun四声 还是 sun一声亚马逊xun四声
我觉得我是…被…又被…造句 我觉得我是…被…又被…造句我觉得我是…被…又被…造句我觉得我是一只困在笼子里的小鸟,被老师束缚着,又...
潜江西西花园农场好不好玩 潜江西西花园农场好不好玩好玩。潜江西西花园农场可以欣赏到蠢衡仔美丽的田园风光、鲜花盛开的花海以及湖泊...
韩庚参加的所有中国节目 韩庚参加的所有中国节目最早的一个是和马雪的广播节目然后是新浪的,是SJ全部队员然后是 鲁豫有约越策越...
表现头脑灵活聪明的成语 表现头脑灵活聪明的成语表现头脑灵活聪明的成语1、聪明伶俐 2、信手拈来3、运筹帷幄4、秀外慧中
介绍人体素描书 介绍人体素描书动漫专业,最重要了解是人体动态及结构。了解了动态在创作的时候就画出人物的跑、跳、舞、坐...
一颗质地均匀的骰子求事件c等于... 一颗质地均匀的骰子求事件c等于出现奇数或4点的概率所求概率=4/6=2/3.
wwe疯狂小子演的电影是什么? wwe疯狂小子演的电影是什么?十二回合3致命禁闭十二回合3如果你是高端影迷这就是一个漏洞百出的烂片,...
讨厌噪音吗? 讨厌噪音吗? 对某些持续性的人为噪音和气味比较难以接受,比如宿舍里一个同学的脚臭,经常闻到了就产生...
极限生存mod名称是什么 极限生存mod名称是什么极限生存mod名哪孙称是TheMOBSMod。根据并枣查询相关公开信息显示,...
猎野人的介绍? 猎野人的介绍?《猎野人》是北京东方飞云国际影视公司投资制作,并由田少波导演执导的电影,该片讲述四个年...
自我保护的事例的文章 自我保护的事例的文章自我保护的事例的文章六年级下走着走着,忽然听见一个声音:“小妹妹,你放学啦?”“...
周伯通一生最强武学,远超《九阴... 周伯通一生最强武学,远超《九阴真经》,他为何却从来不用?因为他的武功已经很高了,就算不用九阴真经也可...
关于洛神的传说? 关于洛神的传说?详细些介绍。在洛河两岸,流传着一个脍灸人口的洛神宓妃的故事。  宓妃原是伏羲氏的女儿...
什么才是正确的八字合婚 什么才是正确的八字合婚男命年命年柱相生相合,配婚百年和合。喜欢就结婚 何必被八字束缚呢?其实两个人相...
孩子的专注力? 孩子的专注力?小孩子太皮,一刻也坐不住。不知道怎么办才好。... 小孩子太皮,一刻也坐不住。不知道...
微微一笑很倾城中二喜的那个持久... 微微一笑很倾城中二喜的那个持久战是么意思?持久战就是接回生子两个人过一辈子啊~~~~(*^__^*)...