Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客
Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动、缩放时间轴,鼠标移动到时间轴的stage,下方对应的stage时间表会高亮.
这是因为博客园的文章本质就是html标签集合组成的页面,如果能嵌入适当的css和js文件,也能得到想要的效果。
拿到运行时间表
先在服务器运行./start-history-server.sh开启历史服务器,之后就可以查看运行完毕的spark jobs页面

点击此处,进入job

点击绿色箭头处打开时间轴,点击紫色箭头处查看stage的运行情况(不同executor的运行情况)
复制class为container-fluid的html元素及其内部,拼接进一篇博客作比对用
获得css
对应的js和css链接都要复制到这个html上。js在博客园后台申请下权限,就能在博文写js了,这些js文件的操作是对特定页面有效的,其他博文没有影响。嵌入页首页尾。
麻烦的是css,如果全部提取出来,文字量太大了,复制的样式出问题很难揪bug。
只能复制spark页面里面的css,可是这种页面的css规则太多太杂,很难单独提取
这时就要请万能的Python出场了.
import re
import cssselect
from lxml import etree def getAllStyle(filepath):
cssdict = []
alloof = ''
with open(filepath, 'r', encoding='utf-8') as r:
line = r.read().replace('\n ','').replace('\n ','').replace('\n','')
for stylestr in re.findall(r'[^}]+{[^}]+}', line):
if(filepath.find('spark-dag-viz.css') != -1):
print(stylestr)
csss = stylestr.split('{')
#cssdict[csss[0]] = '{' + csss[1]
cssdict.append(stylestr)
#
return cssdict
#
def getHtree(filepath):
alloof = ''
htree = None
with open(filepath, 'r', encoding='utf-8') as r:
htree = etree.HTML(r.read())
return htree
#
def getValidCss(filepath, csses):
htree = getHtree(filepath)
validCss = []
for css in csses:
getsplit = css.split('{')[0]
getyou = []
for acss in getsplit.split(','):
acss = acss.replace(':after','')\
.replace(':before','')\
.replace('::-moz-focus-inner','')\
.replace('::-webkit-search-cancel-button','')\
.replace(':-moz-placeholder','')\
.replace(':-ms-input-placeholder','')\
.replace('::-webkit-input-placeholder','')\
.replace(':invalid','')\
.replace('::-webkit-search-decoration','')
#acss = acss.split(':')[0]
if(acss.find('@') != -1):
getyou.append(1)
else:
getyou.extend(htree.cssselect(acss))
if(len(getyou) != 0):
validCss.append(css)
return validCss
#
def exportYou(filepath, validCss):
with open(filepath, 'w', encoding='utf-8') as w:
for val in validCss:
w.write(val + '\n')
#
if __name__ == '__main__':
cssfiles = ['C:/Users/Administrator/Documents/JobDetail_files/bootstrap.min.css',
'C:/Users/Administrator/Documents/JobDetail_files/vis.min.css',
'C:/Users/Administrator/Documents/JobDetail_files/webui.css',
'C:/Users/Administrator/Documents/JobDetail_files/timeline-view.css',
'C:/Users/Administrator/Documents/JobDetail_files/spark-dag-viz.css']
cssdict = []
for cssfile in cssfiles:
cssdict.extend(getAllStyle(cssfile))
validCss = getValidCss('C:/Users/Administrator/sparktimelime.html', cssdict)
exportYou('C:/Users/Administrator/sparkCss.html', validCss)
因为这5个css文件是spark前端要用的,从这里面提取出来css样式,再用lxml提取html标签树,用css选择器选择对应元素,如果存在就把css样式提取出来(注意带@和:号的,可能是pseudo),再一起写进html里面(博文正文可以嵌入style标签,但是不能嵌入script标签)
提取出css样式后,复制到最顶的style标签里面。再对style进行某些筛选,就可以让博文也能实现spark前端那种效果。
Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客的更多相关文章
- Spark大型电商项目实战-及其改良(3) 分析sparkSQL语句的性能影响
之前的运行数据被清除了,只能再运行一次,对比一下sparkSQL语句的影响 纯SQL的时间 对应时间表 th:first-child,.table-bordered tbody:first-child ...
- Spark大型电商项目实战-及其改良(1) 比对sparkSQL和纯RDD实现的结果
代码存在码云:https://coding.net/u/funcfans/p/sparkProject/git 代码主要学习https://blog.csdn.net/u012318074/artic ...
- Spark大型电商项目实战-及其改良(4) 单独运行程序发现的问题
之前的运行结果比对发现,有1个函数的作用在2个job里面是相同的,但是对应的计算时间却差太远 于是把4个job分开运行.虽说使用的数据不同,但是生成数据的生成器是相同的,数据排布差距不大,数据量也是相 ...
- Spark大型电商项目实战-及其改良(2) RDD优化效果不稳定的真正原因
首先看没有map join的第2任务: 时间线如下 接着是对应id的算子计算时间表 Stage Id Description Submitted Duration Tasks: Succeeded/T ...
- 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
- SpringBoot电商项目实战 — ElasticSearch接入实现
如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...
- SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现
在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多 ...
- C# 大型电商项目性能优化(一)
经过几个月的忙碌,我厂最近的电商平台项目终于上线,期间遇到的问题以及解决方案,也可以拿来和大家多做交流了. 我厂的项目大多采用C#.net,使用逐渐发展并流行起来的EF(Entity Framewor ...
随机推荐
- 课堂笔记及知识点----栈和队列(2018/10/24(am))
栈: Stack<int> xt=new Stack<int>() ; 先进后出,后进先出,水杯结构,顺序表类似 常用方法: .pop---->出栈,弹栈 ...
- Python学习小纪
1.打包发布*.py文件---"文件路径下打开命令行 d:\python\python.exe setup.py sdist" eg:打包发布f:\C\python\print_l ...
- js基本概述
js(javascript)是一门编程语言,用来实现与浏览器交互. 一 js的基本语法要求有以下几点 1严格区分大小写 2标识符起名要求与java一样,参考java. 3变量的概念,变量声明使用var ...
- String工具类2
1:比较字符串 public static void main(String[] args) { // String去创建对象有多种方式 // 方式1 直接字面值赋值 String s = " ...
- CMC+混频v103测试(scrt,vbs文件)
Sub Main Dim cnte Dim cnt Dim delay Dim time Dim onetime onetime = 9999999 delay = 5000 time = 700 F ...
- eolinker使用初体验(一)
1.官网 https://www.eolinker.com 2.安装测试增强插件,由于chrome安装的时候有问题,建议移步firefox浏览器,不纠结.. 3.新建一个单例测试
- git使用:本地分支merge到远程分支
背景:为了更加规范维护自动化测试工程,代码提交流程最近更新了,先拉分支到本地修改,完成后同步到远程分支. 前置条件 (1)本地机器可通过ssh与gitlab服务器通信 (2)gitlab上的测试项目中 ...
- Appium IOS 使用多模拟器并发执行测试
申明一下 转载请注明出处 复制粘贴请滚蛋 !!!!!!!! 最近在是用appium进行app的并发测试,并且Android已经实现在同一台PC机使用多个模拟器并发测试的功能 这里说一句模拟器使 ...
- python类与对象-如何派生内置不可变类型并修其改实例化行为
如何派生内置不可变类型并修其改实例化行为 问题举例 自定义一种新类型的元组,对传入的可迭代对象,我们只保留 其中int类型且值大于0的元素,例如 IntTuple([1, -1, 'abc', 6, ...
- vue中上传文件之multipart/form-data
首先在项目里用了拦截器的,由于拦截器会将传递的参数转成对象,所以你i提交的时候会发现multipart/form-data或转变成application/json 其次关于input的文件上传是需要一 ...