# Writing a new Visualization (Experimental) ( 编写新的可视化(实验) )
原文链接 : [http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinvisualization.html](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinvisualization.html)
译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=10031097](http://www.apache.wiki/pages/viewpage.action?pageId=10031097)
贡献者 : [小瑶](/display/~chenyao) [ApacheCN](/display/~apachecn) [Apache中文网](/display/~apachechina)
## 什么是 Apache zeppelin 可视化
**Apache Zeppelin** 可视化是一种可插拔的软件包,可以在运行时通过 **Zeppelin** 中的 **Helium **框架 加载/卸载。可视化是一个 **javascript npm** 包,用户可以像 **notebook **中任何其他内置的可视化一样使用它们。
## 它是怎么运行的?
### 1.Load Helium package files from registry ( 从注册表中加载 Helium 包 )
**Zeppelin** 需要知道可视化包可用。 **Zeppelin** 默认从本地注册表(默认为 **helium/** 目录)搜索 **Helium** 包文件。 **Helium** 包文件提供 **name** ,**artifact** 等信息。它类似于 **npm** 包中的 **package.json** 。
这是一个例子 **helium/zeppelin-example-horizontalbar.json**
```
{
"type" : "VISUALIZATION",
"name" : "zeppelin_horizontalbar",
"description" : "Horizontal Bar chart (example)",
"artifact" : "./zeppelin-examples/zeppelin-example-horizontalbar",
"license" : "Apache-2.0",
"icon" : "<i class='fa fa-bar-chart rotate90flipX'></i>"
}
```
查看 [创建 **helium package file**](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinvisualization.html#3-create-helium-package-file) 部分以了解它。
### 2.Enable packages ( 启用包 )
一旦 **Zeppelin** 从本地注册表加载 **Helium** 包文件,可用的包将显示在 **Helium menu **中。
点击 “**enable** ( 启用 )” 按钮。
![](https://img.kancloud.cn/38/8e/388eea22792dd3f593261ea541480a2f_566x337.jpg)
### 3.Create and load visualization bundle on the fly ( 快速创建并加载可视化包 )
一旦启用可视化包,**HeliumVisualizationFactory** 将创建一个 **js bundle** 。 ** js bundle** 由 **helium/visualization/load rest api** 端点提供。
### 4.Run visualization ( 运行可视化 )
**Zeppelin** 显示加载的可视化的附加按钮。用户可以像任何其他内置可视化一样使用。
![](https://img.kancloud.cn/09/61/0961a3379a3a5b72b1d915d798c88530_566x357.jpg)
## Write new Visualization ( 编写新的可视化 )
### 1.Create a npm package ( 创建一个 npm 包 )
在新的 **Visualization** 目录中创建一个 **[package.json](https://docs.npmjs.com/files/package.json)** 。通常,您可以在 **package.json** 中添加任何依赖项,但 **Zeppelin** 可视化包只允许两个依赖关系:** [zeppelin-vis](https://github.com/apache/zeppelin/tree/master/zeppelin-web/src/app/visualization)** 和** [zeppelin-tabledata](https://github.com/apache/zeppelin/tree/master/zeppelin-web/src/app/tabledata)** 。
下面是一个例子:
```
{
"name": "zeppelin_horizontalbar",
"description" : "Horizontal Bar chart",
"version": "1.0.0",
"main": "horizontalbar",
"author": "",
"license": "Apache-2.0",
"dependencies": {
"zeppelin-tabledata": "*",
"zeppelin-vis": "*"
}
}
```
### 2.Create your own visualization ( 创建你自己的可视化 )
要创建自己的可视化,您需要创建一个 **js** 文件,并从 **[zeppelin-vis](https://github.com/apache/zeppelin/tree/master/zeppelin-web/src/app/visualization)** 包导入 **[Visualization](https://github.com/apache/zeppelin/blob/master/zeppelin-web/src/app/visualization/visualization.js)** 类并扩展该类。 **[zeppelin-tabledata](https://github.com/apache/zeppelin/tree/master/zeppelin-web/src/app/tabledata)** 包提供了一些有用的转换,如 **pivot** ,可以在可视化中使用。 (也可以创建自己的 **transformation** )。
**[Visualization](https://github.com/apache/zeppelin/blob/master/zeppelin-web/src/app/visualization/visualization.js)** 类,有几种方法需要 **override** 和 **implement** 。这是简单的可视化,只是打印 **Hello world**。
```
import Visualization from 'zeppelin-vis'
import PassthroughTransformation from 'zeppelin-tabledata/passthrough'
export default class helloworld extends Visualization {
constructor(targetEl, config) {
super(targetEl, config)
this.passthrough = new PassthroughTransformation(config);
}
render(tableData) {
this.targetEl.html('Hello world!')
}
getTransformation() {
return this.passthrough
}
}
```
要了解有关 **Visualization** 类的更多信息,请查看[**visualization.js**](https://github.com/apache/zeppelin/blob/master/zeppelin-web/src/app/visualization/visualization.js) 。
您可以在 [此处](https://github.com/apache/zeppelin/tree/master/zeppelin-examples/zeppelin-example-horizontalbar) 查看完整的可视化包示例。
**Zeppelin** 的内置可视化使用相同的 **API** ,因此您可以查看 **[built-in visualizations](https://github.com/apache/zeppelin/tree/master/zeppelin-web/src/app/visualization/builtins)** 作为附加示例。
### 3.Create **Helium package file ( 创建 Helium 包文件 )**
**Helium package file** 是一个 **json** 文件,提供有关应用程序的信息。 **Json** 文件包含以下信息
```
{
"type" : "VISUALIZATION",
"name" : "zeppelin_horizontalbar",
"description" : "Horizontal Bar chart (example)",
"license" : "Apache-2.0",
"artifact" : "./zeppelin-examples/zeppelin-example-horizontalbar",
"icon" : "<i class='fa fa-bar-chart rotate90flipX'></i>"
}
```
#### type ( 类型 )
创建可视化时,“**type** ( 类型 )” 应该是 “**VISUALIZATION** ( 可视化 )”。如果您对其他类型的软件包感兴趣,请查看 [**application** ( 应用程序 )](http://zeppelin.apache.org/docs/0.7.2/development/writingzeppelinapplication.html) 类型。
#### name ( 名称 )
可视化的名称。应该是独一无二的。允许 **[A-Za-z90-9_]** 。
#### description ( 描述 )
关于可视化的简短描述。
#### artifact
可视化 **npm** 包的位置。支持带有版本或本地文件系统路径的 **npm** 软件包。
例如
当 **artifact** 存在于 **npm** 存储库中时
```
artifact: "my-visualiztion@1.0.0"
```
当 **artifact** 存在于本地文件系统中时
```
artifact: "/path/to/my/visualization"
```
#### license ( 执照 )
许可信息。
例如
```
license: "Apache-2.0"
```
#### icon ( 图标 )
用于可视化选择按钮的图标。此字段中的字符串将被呈现为 **HTML** 标记。
例如
```
icon: "<i class='fa fa-coffee'></i>"
```
### 4.Run in dev mode ( 以开发者模式运行 )
将您的 **Helium** 包文件 放在本地注册表( **ZEPPELIN_HOME /helium**)中。运行 **Zeppelin** 。然后在可视化开发模式下运行 **zeppelin-web** 。
```
cd zeppelin-web
yarn run visdev
```
您可以浏览 **localhost:9000** 。每次刷新您的浏览器,**Zeppelin** 将重建您的可视化并重新加载更改。
- 快速入门
- 什么是Apache Zeppelin?
- 安装
- 配置
- 探索Apache Zeppelin UI
- 教程
- 动态表单
- 发表你的段落
- 自定义Zeppelin主页
- 升级Zeppelin版本
- 从源码编译
- 使用Flink和Spark Clusters安装Zeppelin教程
- 解释器
- 概述
- 解释器安装
- 解释器依赖管理
- 解释器的模拟用户
- 解释员执行Hook(实验)
- Alluxio 解释器
- Beam 解释器
- BigQuery 解释器
- Cassandra CQL 解释器
- Elasticsearch 解释器
- Flink 解释器
- Geode/Gemfire OQL 解释器
- HBase Shell 解释器
- HDFS文件系统 解释器
- Hive 解释器
- Ignite 解释器
- JDBC通用 解释器
- Kylin 解释器
- Lens 解释器
- Livy 解释器
- Markdown 解释器
- Pig 解释器
- PostgreSQL, HAWQ 解释器
- Python 2&3解释器
- R 解释器
- Scalding 解释器
- Scio 解释器
- Shell 解释器
- Spark 解释器
- 系统显示
- 系统基本显示
- 后端Angular API
- 前端Angular API
- 更多
- 笔记本存储
- REST API
- 解释器 API
- 笔记本 API
- 笔记本资源 API
- 配置 API
- 凭据 API
- Helium API
- Security ( 安全 )
- Shiro 授权
- 笔记本 授权
- 数据源 授权
- Helium 授权
- Advanced ( 高级 )
- Zeppelin on Vagrant VM ( Zeppelin 在 Vagrant 虚拟机上 )
- Zeppelin on Spark Cluster Mode( Spark 集群模式下的 Zeppelin )
- Zeppelin on CDH ( Zeppelin 在 CDH 上 )
- Contibute ( 贡献 )
- Writing a New Interpreter ( 写一个新的解释器 )
- Writing a new Visualization (Experimental) ( 编写新的可视化(实验) )
- Writing a new Application (Experimental) ( 写一个新的应用程序( 实验 ) )
- Contributing to Apache Zeppelin ( Code ) ( 向 Apache Zeppelin 贡献( 代码 ) )
- Contributing to Apache Zeppelin ( Website ) ( 向 Apache Zeppelin 贡献(website) )