zeppelin的数据集的优化
前面我们介绍了zeppelin的修改,前面由于自己的原因,对zeppelin的修改过于多,现在由于优化了,我们两个类,
一个是zeppelin-server的NotebookServer的类的broadcastParagraph(Note note,Paragraph p)的代码,另外
的一个是zeppelin-zengine里面的Note的run(String paragraphId)的这个方法还有添加了Utils的这个类对于数据集的查找,对于这两个方法,就可以完美的对
zeppelin的数据集的修改。
我们首先介绍一下zeppelin的工作原理以及我们做的修改原理
1.zeppelin的实现
原先zeppelin的实现原理是当我在note的paragraph里面写spark语句的时候,当我们点击运行或点击其他的note的时候,
此时,zeppelin会保存那个paragraph里面的所有数据,而且不会进行改变。当我们需要运行的时候,
zeppelin就会去找notebook里面paragraph的text属性然后进行运行以及修改状态和显示到页面。
2.zeppelin的修改点
关于zeppelin的paragraph.text保存到数据库的操作没有进行更改,将用户所写数据原样的保存到数据库中
改动一:
在run的时候,把待运行paragraph里面的text数据中的数据集改为真实路径提交到zeppelin中运行
改动二:
运行完成回显数据的时候修改其paragraph状态,再恢复成为用户输入的样子(把真实路径换为数据集)
下面贴一下代码
zeppelin-zengine的Note的类
- public void run(String paragraphId) {
- //根据是否逾期来选择读取数据的方式
- if(Utils.isOverDueTime()){
- // setdataMap = findData();
- setdataMap = Utils.finddataMap();
- setdataList = Utils.finddataList();
- }
- Paragraph p = getParagraph(paragraphId);
- p.setListener(jobListenerFactory.getParagraphJobListener(this));
- if (p.isBlankParagraph()) {
- logger.info("skip to run blank paragraph. {}", p.getId());
- p.setStatus(Job.Status.FINISHED);
- return;
- }
- String requiredReplName = p.getRequiredReplName();
- Interpreter intp = factory.getInterpreter(p.getUser(), getId(), requiredReplName);
- if (intp == null) {
- String intpExceptionMsg =
- p.getJobName() + "'s Interpreter " + requiredReplName + " not found";
- InterpreterException intpException = new InterpreterException(intpExceptionMsg);
- InterpreterResult intpResult =
- new InterpreterResult(InterpreterResult.Code.ERROR, intpException.getMessage());
- p.setReturn(intpResult, intpException);
- p.setStatus(Job.Status.ERROR);
- throw intpException;
- }
- if (p.getConfig().get("enabled") == null || (Boolean) p.getConfig().get("enabled")) {
- p.setAuthenticationInfo(p.getAuthenticationInfo());
- Paragraph p2 = p;
- if (p.settings != null) {
- String text = p2.getText();
- if (text != null && text.contains("#")) {
- p2 = p.cloneParagraphForUser(p.getId());
- p2.setListener(jobListenerFactory.getParagraphJobListener(this));
- p2.setAuthenticationInfo(p.getAuthenticationInfo());
- //替换数据
- for (String s : setdataList){
- if(! text.contains("#")){
- break;
- }
- if(text.contains(s)){
- text = text.replaceAll(s, setdataMap.get(s));
- }
- }
- p2.setText(text);
- p2.setInterpreterFactory(factory);
- p2.setNote(p.getNote());
- }
- }
- intp.getScheduler().submit(p2);
- }
- }
zeppelin-server的NotebookServer
- public void broadcastParagraph(Note note, Paragraph p) {
- Paragraph cacheP = note.getParagraph(p.getId());
- if(cacheP == null)
- cacheP = p;
- if (cacheP.getText() != null && !cacheP.getText().equals(p.getText())) {
- if (p.getReturn() instanceof InterpreterResult) {
- cacheP.setReturn(p.getResult(), p.getException());
- } else {
- cacheP.setResult(p.getReturn());
- }
- cacheP.setStatus(p.getStatus());
- return;
- }
- // if (p.settings != null) {
- // //clone()方法
- // p2 = p.cloneParagraphForUser(p.getId());
- //
- // String text = p2.getText();
- // if (text != null) {
- // if (text.contains("/tmp/xjdx.txt")) {
- // text = text.replaceAll("/tmp/xjdx.txt", "#mydata");
- // p2.setText(text);
- // }
- // }
- // }
- if (note.isPersonalizedMode()) {
- broadcastParagraphs(p.getUserParagraphMap(), cacheP);
- } else {
- broadcast(note.getId(), new Message(OP.PARAGRAPH).put("paragraph", cacheP));
- }
- }
下面介绍一下Utils的类
- public class Utils {
- //数据库信息
- // private static final String driver = "com.mysql.jdbc.Driver";
- // private static final String url = "jdbc:mysql://172.20.11.10:3306/xxxx?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false";
- // private static final String username = "xxxx";
- // private static final String password = "xxxx";
- private static String driver = null;
- private static String url = null;
- private static String username = null;
- private static String password = null;
- private static final long ALLOW_TIME = 10 * 1000;
- private static Date preTime = null;
- private static HashMap<String,String> setdataMap = null;
- private static ArrayList<String> setdataList = null;
- static{
- driver = Config.getConfig("jdbc_driverClassName");
- url = Config.getConfig("jdbc_url");
- username = Config.getConfig("jdbc_username");
- password = Config.getConfig("jdbc_password");
- }
- //是否逾期时间
- public static boolean isOverDueTime() {
- Date d = new Date();
- if (preTime == null || (d.getTime() - preTime.getTime()) > ALLOW_TIME || setdataList == null || setdataMap == null)
- return true;
- return false;
- }
- //进行实时查询数据库查询
- public static HashMap<String,String> finddataMap(){
- try {
- preTime = new Date();
- setdataMap = new HashMap<>();
- Class.forName(driver);
- Connection conn = (Connection) DriverManager.getConnection(url, username, password);
- String sql = "select dataset.ds_name , dataset_storage.item_value from dataset left join dataset_storage on dataset.id = dataset_storage.dataset_id and dataset_storage.item_key = 'majorPath'";
- PreparedStatement pstmt = (PreparedStatement)conn.prepareStatement(sql);
- ResultSet rs = pstmt.executeQuery();
- while (rs.next()) {
- if((rs.getString("item_value")) != null ){
- setdataMap.put("#" + rs.getString("ds_name"),rs.getString("item_value"));
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return setdataMap;
- }
- public static ArrayList<String> finddataList(){
- setdataList = new ArrayList<>();
- if(setdataMap != null){
- for (String s:setdataMap.keySet()){
- setdataList.add(s) ;
- }
- }
- return setdataList;
- }
- }
以上就是对于zeppelin的数据集修改的二次优化
zeppelin的数据集的优化的更多相关文章
- 机器学习与Tensorflow(3)—— 机器学习及MNIST数据集分类优化
一.二次代价函数 1. 形式: 其中,C为代价函数,X表示样本,Y表示实际值,a表示输出值,n为样本总数 2. 利用梯度下降法调整权值参数大小,推导过程如下图所示: 根据结果可得,权重w和偏置b的梯度 ...
- SqlServer性能优化 即席查询(十三)
执行计划,查询类别: 1.即席查询 2.预定义查询 select c.EnglishProductCategoryName,p.EnglishProductName,p.Color,p.Siz ...
- MSSQL数据批量插入优化详细
序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据是如何插入的呢?我今天就此问题做个探 ...
- Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理
前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...
- Hadoop中两表JOIN的处理方法(转)
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...
- (转)MapReduce中的两表join几种方案简介
转自:http://blog.csdn.net/leoleocmm/article/details/8602081 1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而 ...
- Hadoop中两表JOIN的处理方法
Dong的这篇博客我觉得把原理写的很详细,同时介绍了一些优化办法,利用二次排序或者布隆过滤器,但在之前实践中我并没有在join中用二者来优化,因为我不是作join优化的,而是做单纯的倾斜处理,做joi ...
- (转)MapReduce 中的两表 join 几种方案简介
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...
- apriori && fpgrowth:频繁模式与关联规则挖掘
已迁移到我新博客,阅读体验更佳apriori && fpgrowth:频繁模式与关联规则挖掘 详细代码我放在github上:click me 一.实验说明 1.1 任务描述 1.2 数 ...
随机推荐
- 黑客伦理(hacker ethic)--《黑客与画家》
使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制.任何事情都应该亲手尝试. Access to computers--and anything that might teach you ...
- Android - 常见的控件布局,左中右,左右等
这里汇总的是自己在工作过程中,使用过的常见空间布局,记录在这里.详情如下: 1. 三个控件,分别处于左,中,右 要点:使用RelativeLayout <RelativeLayout andro ...
- php的yii框架开发总结3
利用yii里面的gii工具可以很容易的自动创建数据表相应的的CURD操作的基于MVC的文件: 首先,打开:自己网站/protected/config/main.php文件 'modules'=> ...
- 【转载】SQL执行计划
要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看的. ...
- 【js基础修炼之路】- 微任务,宏任务和Event-Loop
一段代码让你了解Event-Loop console.log(1); setTimeout(() => { console.log(2); }, 0); new Promise((resolve ...
- 谨慎使用#pragma pack
前段时间将一个项目由vc6.0转为vs2005,发现了有些对象的地址奇怪变化的问题,细查之下发现出现了#pragma pack乱用的问题,在恢复内存对齐使用了#pragma pack(pop, 1)的 ...
- Selenium入门18 断言
自动化测试需对比实际结果与预期结果,给出测试结论. 1 条件判断 if ...else... 2 assert ... #coding:utf-8 #断言 from selenium import w ...
- 在写EF 时把时间格式化的做法
SELECT COUNT(l.LogSeq), date_format(l.CreateDate,'%Y-%m') CreateDateByMonth FROM LOL l WHERE l.Creat ...
- 最小堆的维护,POJ(2051)
题目链接:http://poj.org/problem?id=2051 ///维持最小堆(优先队列)POJ2051 #include <iostream> #include <str ...
- 会话技术: Cookie Session JSP
## Cookie A..概念:客户端会话技术,将数据保存到客户端 B.使用步骤: 1.创建Cookie对象,绑定数据 new Cookie(String name, String value) ...