Pyspark UI (二)

本文主要探讨PySpark的用户界面(UI),包括如何通过UI跟踪和优化Spark作业,以及它在Hive数据挖掘中的应用。内容涵盖了PySpark作业的执行流程、Stage详细信息、内存管理和配置调整等关键点。

 

###############finish hot map
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.datasets import register_url
import pandas as pd
import numpy as np


df_state = pd.read_csv('/home/hadoop/us-state.csv')

tl = Timeline(init_opts=opts.InitOpts(theme='chalk', width='1000px', height='600px'))

# 时间轴配置
tl.add_schema(
    is_auto_play=True,  # 自动播放
    is_timeline_show=False,   # 关闭timeline组件
    is_loop_play=True,  # 是否循环播放
    play_interval=200   # 播放速度,200ms
    )
    
for day in df_state.date.unique().tolist()[::5]:
    # 用于geo和bar中的标签显示
    fmt_js = """function (params) {return params.name+':'+Number(params.value[2]);}"""

    data_new = df_state[df_state.date == day]
    data_dict = {}
    for _, row in data_new.iterrows():
        if(row.state in data_dict.keys()):
            data_dict[row.state]+= row.cases
        else:
            data_dict[row.state]= row.cases
    keylist=list(data_dict.keys())
    valuelist=list(data_dict.values())

    data_pair=[]
    for i in range(len(data_dict)):
        data_pair.append([keylist[i],valuelist[i]])
    t = sorted(data_pair, key=lambda x: x[1], reverse=True)[:10][::-1]
    
    """
    Bar:
    展示每天top10国家的数据
    放在grid的左下角
    """
    bar = Bar()
    bar.add_xaxis([x for x, y in t])
    bar.add_yaxis("", [y for x, y in t],
                  itemstyle_opts={'normal': {'borderColor': '#1773c3',
                                             'shadowColor': '#1773c3',
                                             'shadowBlur': 20,
                                             'opacity': 0.8
                                             }
                                  })
    # 标签格式设置
    bar.set_series_opts(label_opts=opts.LabelOpts(position="insideLeft",
                                                  font_size=10,
                                                  font_weight='bold',
                                                  formatter='{b}:{c}'))
    # 全局配置项
    bar.set_global_opts(xaxis_opts=opts.AxisOpts(is_show=False, max_=7e6),
                        yaxis_opts=opts.AxisOpts(is_show=False),
                        title_opts=opts.TitleOpts(title="TOP 10 {}".format(day), pos_top='55%', pos_left='5%',
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=12)),
                        visualmap_opts=opts.VisualMapOpts(is_show=False,
                                                          max_=5e5,
                                                          is_piecewise=False,
                                                          dimension=0,
                                                          range_color=['rgba(219,112,147,0.4)', 'rgba(238,25,27,1)']))
    # 转换xy轴
    bar.reversal_axis()
    
    """
    map图:
    在整个grid中,map是被用来当作底图使用的
    地图的颜色都在map中来配置
    """
    mp = Map()
    mp.add_js_funcs("""echarts.registerMap('USA', {}, {});""".format(data, area_move))
    mp.add(
        "累计确诊人数",
        data_pair,
        "USA",
        is_map_symbol_show=False,
        is_roam=False)
    # 关闭map的标签显示 & 地图风格设置
    mp.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                       itemstyle_opts={'normal': {
                           'areaColor': '#091632',
                           'borderColor': '#1773c3',
                           'shadowColor': '#1773c3',
                           'shadowBlur': 20,
                           'opacity': 0.6
                       }
    })
    
    mp.set_global_opts(
        title_opts=opts.TitleOpts(title="美国疫情蔓延趋势", 
                                  subtitle='数据更新日期:{}'.format(df_state.date.max()),
                                  pos_top='2%', pos_left='center',
                                  title_textstyle_opts=opts.TextStyleOpts(font_size=18)),
        legend_opts=opts.LegendOpts(is_show=False),
    )
    
    """
    GEO图:
    geo在整个grid中是用于展示几个主要国家的数据
    地图的样式都是由map控制
    """
    data_pair = [[x, y] for x, y in data_pair if x in state_list]
    geo = Geo()
    geo.add_js_funcs("""echarts.registerMap('USA', {}, {});""".format(data, area_move))
    # 需要先将几个国家的经纬度信息加入到geo中
    for k, v in loc.items():
        geo.add_coordinate(k, v[0], v[1])
    # 这里将geo的地图透明度配置为0
    geo.add_schema(
        maptype="USA",
        is_roam=False,
        itemstyle_opts={
            'normal': {
                'opacity': 0}})
    
    geo.add("", data_pair, symbol_size=1)
    # 显示标签配置
    geo.set_series_opts(
        label_opts=opts.LabelOpts(
            is_show=True,
            position='right',
            color='white',
            font_size=12,
            font_weight='bold',
            formatter=JsCode(fmt_js)),
    )
    
    # 将三个图组合起来,配置好各自的位置
    grid = (
        Grid(init_opts=opts.InitOpts(theme='chalk', width='1000px', height='600px'))
        .add(bar, grid_opts=opts.GridOpts(pos_top="60%", pos_right='70%', pos_left='5%'))
        .add(mp, grid_opts=opts.GridOpts(pos_top="12%"))
        .add(geo, grid_opts=opts.GridOpts(pos_bottom="12%"))
    )
    
    grid.render_notebook()
    
    tl.add(grid, day)

tl.render_notebook()

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值