
数据分析数据可视化大数据后端【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppelin1/zeppelin点击查看免费下载导读Apache Zeppelin 内置了一套「显示系统」Display System用于决定解释器Interpreter返回的输出在 Notebook 段落中如何渲染。默认情况下Zeppelin 用%text将解释器响应以纯文本打印而本文要介绍的%html、%markdown、%table与%network则分别提供了 HTML 渲染、Markdown 排版含数学公式、带内置可视化的表格以及属性图Property Graph网络可视化能力。读完本文你将掌握 Zeppelin 各类显示指令的触发方式、数据格式约定、与源码实现相对应的底层原理并能在 Spark 等解释器中直接产出可交互的可视化输出。本文内容以仓库文档 docs/usage/display_system/basic.md 为骨架并结合zeppelin-interpreter模块的源码进行佐证与扩充。显示系统是什么一次输出多种渲染在 Zeppelin 的段落Paragraph中解释器执行代码后返回结果结果会被组织成「结果类型」Type。在源码层面这些类型定义于 InterpreterResult.java 的枚举Typepublic enum Type { TEXT, // 纯文本 HTML, // HTML ANGULAR, // Angular 动态内容配合 zeppelinContext 使用 TABLE, // 表格 IMG, // 图片 SVG, // SVG 矢量图 NULL, // 空 NETWORK // 属性图网络 }在段落里输入%text、%html、%markdown、%table、%network等指令其实是在告诉解释器「接下来的内容请按该类型处理」。这些指令的解析发生在 InterpreterOutput.java 的write(int b)方法中当一行以%开头时输出流会累积该行的指令前缀并与InterpreterResult.Type的枚举值转为小写逐一比对命中即切换当前输出的类型setType(type)。也就是说同一个段落的输出中可以通过换行分隔依次切换到多个不同的显示系统。关键特性显示系统与后端解释器无关backend independent。无论段落跑的是 Spark、Python、SQL 还是 Shell只要其输出符合对应的格式约定前端都能按指定类型渲染。%text默认的纯文本输出Zeppelin 默认将解释器的响应以纯文本形式打印使用的是text显示系统。即如果段落输出没有携带任何显示指令或仅以%text声明内容会按等宽纯文本展示适合打印日志、调试信息、命令输出等场景。可以显式声明使用text显示系统%text Hello World源码佐证在 InterpreterOutput.java 的getCurrentOutputForWriting()中当输出流尚未创建任何结果消息时会默认setType(InterpreterResult.Type.TEXT)——这从实现层面印证了「纯文本是默认显示系统」。%html把输出当作 HTML 渲染使用%html指令Zeppelin 会把后续输出内容当作 HTML 文档片段渲染到段落中。这常用于输出富文本、自定义样式、嵌入图表脚本或 Web 组件。%html h1Zeppelin HTML Display System/h1 p这是一段由 strong%html/strong 渲染的内容。/p示例截图display_html.png展示了%html输出的效果docs/assets/themes/zeppelin/img/screenshots/display_html.png。值得注意的实现细节Markdown 解释器Markdown.java在完成 Markdown 解析后正是通过return new InterpreterResult(Code.SUCCESS, %html html);将渲染结果以%html形式交给前端——%html是众多高级显示系统的底层承载者。此外Markdown 解释器还会做输入净化sanitizeInput过滤script等不安全标签与onclick事件属性防止 XSS 风险。%markdownMarkdown 排版与数学公式%markdown指令把段落输出渲染为 Markdown支持标题、列表、代码块、表格、链接等标准语法。%markdown # 标题 - 列表项 1 - 列表项 2数学表达式支持%html与%markdown显示系统会自动通过 MathJax 格式化数学表达式。Zeppelin 使用两种分隔符\( ... \)行内公式INLINE EXPRESSION$$ ... $$块级公式BLOCK EXPRESSION。例如%markdown 行内公式\( e^{i\pi} 1 0 \) 块级公式 $$ \int_0^\infty e^{-x^2} dx \frac{\sqrt{\pi}}{2} $$渲染效果见截图docs/assets/themes/zeppelin/img/screenshots/display_formula.png。这对数据科学笔记中书写算法推导、公式说明非常实用。从源码看%markdown指令本身由 Zeppelin 的解释器框架解析与%text、%html相同路径而独立的markdown解释器markdown/src/main/java/org/apache/zeppelin/markdown/则提供了两种解析实现基于 flexmark 的 FlexmarkParser.java 与基于 markdown4j 的 Markdown4jParser.java可通过markdown.parser.type配置切换默认 flexmark并且渲染时会包一层div classmarkdown-body以便套用 CSS 样式。%table表格数据与内置可视化如果手头的数据满足「行与行之间以\n换行分隔、列与列之间以\t制表符分隔、首行作为表头」的约定就可以用%table显示系统直接享受 Zeppelin 内置的可视化能力。数据格式约定%table Column_A \t Column_B \t Column_C Row1_A \t Row1_B \t Row1_C Row2_A \t Row2_B \t Row2_C原始数据示例截图见docs/assets/themes/zeppelin/img/screenshots/display_table.png使用%table后Zeppelin 会将其渲染为可交互表格并提供内置图表柱状图、折线图、饼图、散点图等效果见docs/assets/themes/zeppelin/img/screenshots/display_table1.png。表格中的 HTML%table 里嵌 %html如果表格内容以%html开头则整块内容会被当作 HTML 解释%table %html table trtd单元格 1/tdtd单元格 2/td/tr /table效果见截图docs/assets/themes/zeppelin/img/screenshots/display_table_html.png。这意味着你可以在表格显示系统中嵌入自定义 HTML 表格、富文本甚至组件。源码层面的表格处理输出流对TABLE类型有特殊处理在 InterpreterOutput.java当处于TABLE类型且遇到连续换行时输出流会重置为「新行开头」状态用于分隔后续输出并且在toString()InterpreterResult.java中TABLE类型消息之间会额外追加空行。生产环境中更常见的方式是通过zeppelinContext.show(...)输出表格在 ZeppelinContext.java 中show(Object o)会检查对象是否为解释器支持的类如 DataFrame、Table 等支持则将其序列化写入输出流底层输出即%table格式否则退回纯文本打印。这也是 Spark 中z.show(df)能直接渲染出可视化表格的原因。输出有大小上限保护InterpreterOutput.LIMIT默认来自Constants.ZEPPELIN_INTERPRETER_OUTPUT_LIMIT当TEXT/TABLE输出超过上限时会自动切换为HTML类型并写入「超出大小限制」提示消息避免前端被超长输出压垮。%network属性图模型网络可视化%network指令让 Zeppelin 把输出当作图Graph渲染支持有向/无向图、节点与边的标签与颜色、附带属性数据等适用于社交网络分析、知识图谱、血缘关系、任务依赖等场景。什么是 Labeled Property Graph标记属性图属性图Property Graph由以下元素构成一组顶点vertices每个顶点有唯一标识符id每个顶点有一组出边outgoing edges每个顶点有一组入边incoming edges每个顶点有一个由「键→值」映射构成的属性集合properties。一组边edges每条边有唯一标识符id每条边有一个出射尾顶点tail vertex和一个入射头顶点head vertex每条边有一个标签label表示两个顶点之间关系的类型每条边有一个由「键→值」映射构成的属性集合。标记属性图Labeled Property Graph是属性图的扩展节点可以被贴上labels标签用来表示其在图模型中的不同角色例如「用户 User」「项目 Project」。Zeppelin 的%network显示系统正是基于这一模型设计并且可以方便地将图数据“扁平化”flatten以适配 Zeppelin 提供的其他可视化格式见下文。%network 的 JSON API新的 NETWORK 可视化基于 JSON 描述字段如下字段是否必填说明nodes必填节点列表每个节点可包含id必填唯一、label节点主标签、labels节点标签列表、data节点附带数据edges选填边列表每条边可包含id必填唯一、source必填源节点 id、target必填目标节点 id、label边的主类型、data边附带数据labels选填映射表 (K, V)K 为节点标签、V 为该标签节点的颜色directed选填true/false默认false表示是否为有向图types选填图中边类型的去重distinct列表交互细节点击段落底部的某个节点或边会展示该实体的属性列表data中的键值对。如何在段落中使用 %network下面是一个简单图示例在 Spark 解释器中输出%spark print(s %network { nodes: [ {id: 1}, {id: 2}, {id: 3} ], edges: [ {source: 1, target: 2, id : 1}, {source: 2, target: 3, id : 2}, {source: 1, target: 2, id : 3}, {source: 1, target: 2, id : 4}, {source: 2, target: 1, id : 5}, {source: 2, target: 1, id : 6} ] } )渲染效果见截图docs/assets/themes/zeppelin/img/screenshots/display_simple_network.png。一个更复杂的示例使用标签、颜色、有向边与边属性%spark print(s %network { nodes: [{id: 1, label: User, data: {fullName:Andrea Santurbano}},{id: 2, label: User, data: {fullName:Lee Moon Soo}},{id: 3, label: Project, data: {name:Zeppelin}}], edges: [{source: 2, target: 1, id : 1, label: HELPS},{source: 2, target: 3, id : 2, label: CREATE},{source: 1, target: 3, id : 3, label: CONTRIBUTE_TO, data: {oldPR: https://github.com/apache/zeppelin/pull/1582}}], labels: {User: #8BC34A, Project: #3071A9}, directed: true, types: [HELPS, CREATE, CONTRIBUTE_TO] } )渲染效果见截图docs/assets/themes/zeppelin/img/screenshots/display_complex_network.png。在这个例子中labels将User节点染成绿色#8BC34A、Project节点染成蓝色#3071A9directed: true使边呈现箭头方向types列出全部关系类型可在前端图例/筛选中使用。%network 的源码实现%network在源码中有完整的数据模型支撑图结构定义于 GraphResult.java其内部类Graph包含nodes节点集合、edges边集合、labels节点标签→颜色映射、types关系类型集合与directed是否有向五个字段与上文 JSON API 一一对应。节点实体 Node.java 继承自GraphEntity额外携带labels节点标签集合构造时取第一个标签作为主标签。关系边实体 Relationship.java 继承自GraphEntity包含source源节点 id与target目标节点 id。GraphResult的构造函数直接super(code, Type.NETWORK, gson.toJson(graphObject))将图对象序列化为 JSON 后以NETWORK类型输出与文档描述的 JSON API 完全一致。前端渲染由 visualization-d3network.js 承担它使用 D3 构建力导向布局依据graph.labels为节点着色默认黑色#000000并根据graph.directed决定是否绘制有向箭头。图的“扁平化”Flatten%network输出的图数据可以很容易地扁平化从而复用 Zeppelin 的其他可视化格式。本质上图的nodes与edges均可展开为行列结构例如将每个节点或每条边展开成一行再以%table等格式交给表格类可视化渲染。效果见截图docs/assets/themes/zeppelin/img/screenshots/display_network_flatten.png。这使得同一份图数据既能以网络视图呈现拓扑关系也能以表格/图表形式呈现属性明细。总结与实践建议显示系统指令适用场景数据格式%text默认 /%text日志、调试、命令输出纯文本%html%html富文本、自定义样式、嵌入组件HTML 片段%markdown%markdown文档排版、数学公式MarkdownMathJax 公式%table%table结构化数据、内置可视化图表\n分行、\t分列、首行表头%html开头则按 HTML%network%network属性图、有向/无向图、关系分析上述 JSON APInodes/edges/labels/directed/types实战要点显示系统与解释器后端无关Spark、Python、SQL、Shell 等解释器均可输出上述指令只要内容符合格式约定显式声明优先虽默认%text但在段落输出前显式写上%html、%table、%network等指令可确保输出按预期类型渲染多个类型用换行分隔表格是最常用的数据可视化入口利用%table 内置图表即可完成大量数据分析展示无需额外前端开发需要交互式图分析时优先%network借助标签、颜色、有向边与属性数据可以直接在 Notebook 中完成轻量级图谱分析注意输出安全与大小%html内容需自行保证安全性Markdown 解释器内置了标签净化超大输出会触发ZEPPELIN_INTERPRETER_OUTPUT_LIMIT限制提示。如需继续深入可阅读仓库中的相关实现与配套文档docs/usage/display_system/angular_backend.md、docs/usage/display_system/angular_frontend.mdAngular 动态显示系统以及核心源码 InterpreterResult.java 与 InterpreterOutput.java。赞分享数据分析数据可视化大数据后端【免费下载链接】zeppelinWeb-based notebook that enables>项目地址https://gitcode.com/gh_mirrors/zeppelin1/zeppelin点击查看免费下载相关推荐Apache Zeppelin 显示系统实战指南%text、%html、%table 与 %network 四种输出模式的原理与用法Apache Zeppelin 显示系统实战指南%text、%html、%table 与 %network 四种输出模式的原理与用法 Apache Zeppe后端前端大数据数据分析Apache Zeppelin 显示系统Display System完全指南从 %text 到 %network 图可视化Apache Zeppelin 显示系统Display System完全指南从 %text 到 %network 图可视化 Apache Zeppelin数据分析数据可视化大数据后端前端任务调度如何让2008-2017年旧款Mac重获新生OpenCore Legacy Patcher完全指南如何让2008 2017年旧款Mac重获新生OpenCore Legacy Patcher完全指南 你是否还在使用一台2012年甚至更早的Mac看着苹果官方操作系统固件驱动开发上一篇Genkit JS 高级自定义 Agent 实战用 defineCustomAgent 掌控每一轮对话下一篇Reasoning Trace Optimizer 实战用 MiniMax M2.1 交错思考Interleaved Thinking调试与优化 AI Agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考