前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Calibre | 将EPUB转换为微软正黑体

Calibre | 将EPUB转换为微软正黑体

作者头像
gyro永不抽风
发布于 2021-05-21 06:28:54
发布于 2021-05-21 06:28:54
2.8K0
举报

流计算 Oceanus 简介

流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发、无缝连接、亚秒延时、低廉成本、安全稳定等特点的企业级实时大数据分析平台。流计算 Oceanus 以实现企业数据价值最大化为目标,加速企业实时化数字化的建设进程。

本文将您详细介绍如何使用自定义标量函数(UDF),对随机产生的数据进行处理后存入 MySQL 中。

前置准备

创建流计算 Oceanus 集群

在流计算 Oceanus 产品活动页面 1 元购买 Oceanus 集群。进入 Oceanus 控制台 ,点击左侧【集群管理】,点击左上方【创建集群】,具体可参考 Oceanus 官方文档 创建独享集群

创建 MySQL 实例

进入 MySQL 控制台 ,点击【新建】。具体可参考官方文档 创建 MySQL 实例 。进入实例后,单击右上角【登陆】即可登陆 MySQL 数据库。

创建 MySQL 表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-- 建表语句,用于接收 Sink 端数据
CREATE TABLE `udf_output` (
  `id`        int(10) NOT NULL,
  `len_name`  int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

开发 UDF

这里定义一个获取字符串字段长度的函数。如果传入一个字段,则获取这个字段的长度后返回;如果传入两个字段,则获取这两个字段的长度和后返回。

1. 代码编写

在本地IDE中创建 maven 项目,编写自定义函数UDF的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 类名:StringLengthUdf
package demos.UDF;import org.apache.flink.table.functions.ScalarFunction;public class StringLengthUdf extends ScalarFunction {public long eval(String a) {
        return a == null ? 0 : a.length();
    }public long eval(String b, String c) {
        return eval(b) + eval(c);
    }
}
2. 项目打包

使用 IDEA 自带打包工具 Build Artifacts 或者命令行进行打包。 命令行打包命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mvn clean package

命令行打包后生成的 JAR 包可以在项目 target 目录下找到。

流计算 Oceanus 作业

上传依赖

在 Oceanus 控制台,点击左侧【依赖管理】,点击左上角【新建】新建依赖,上传本地 JAR 包。

创建 SQL 作业

在 Oceanus 控制台,点击左侧【作业管理】,点击左上角【新建】新建作业,作业类型选择 SQL 作业,点击【开发调试】进入作业编辑页面。 单击【作业参数】,在【引用程序包】处选择刚才上传的 JAR 包。

1. 创建 Function
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TEMPORARY SYSTEM FUNCTION StringLengthUdf AS 'demos.UDF.StringLengthUdf';

StringLengthUdf代表创建的函数名,demos.UDF.StringLengthUdf代表类路径。

2. 创建 Source
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE random_source ( 
  id INT, 
  name1 VARCHAR, 
  name2 VARCHAR 
  ) WITH ( 
  'connector' = 'datagen', 
  'rows-per-second'='1',          -- 每秒产生的数据条数
  'fields.id.kind'='sequence',    -- 无界的随机数
  'fields.id.start'='1',          -- 随机数的最小值
  'fields.id.end'='5',            -- 随机数的最大值
  'fields.name1.length'='10',     -- 随机字符串的长度
  'fields.name2.length'='10'      -- 随机字符串的长度
);
3. 创建 Sink
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE `jdbc_upsert_sink_table` (
    `id` INT,
    `len_name` INT,
    PRIMARY KEY(id) NOT ENFORCED
) WITH (
    -- 指定数据库连接参数
    'connector' = 'jdbc',
    'url' = 'jdbc:mysql://xx.xx.xx.xx:xxxx/testdb?rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai',         -- 请替换为您的实际 MySQL 连接参数
    'table-name' = 'udf_output',           -- 需要写入的数据表
    'username' = 'root',                   -- 数据库访问的用户名(需要提供 INSERT 权限)
    'password' = 'xxxxxxxxx',              -- 数据库访问的密码
    'sink.buffer-flush.max-rows' = '200',  -- 批量输出的条数
    'sink.buffer-flush.interval' = '2s'    -- 批量输出的间隔
);
4. 编写业务 SQL
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO jdbc_upsert_sink_table
SELECT
id,
CAST(StringLengthUdf(name1,name2) AS INT) AS `len_name`
FROM random_source;

运行作业

点击【发布草稿】->【运行版本】即可运行,可通过【日志】面板 TaskManager 或 Flink UI 查看运行信息。

总结

本文首先在本地开发 UDF 函数,将其打成 JAR 包后上传到 Oceanus 平台引用。接下来使用 Datagen 连接器产生虚拟数据,调用 UDF 函数进行不同字段的字符串长度的加和操作后存入 MySQL 中。

  • 自定义标量函数(UDF)将0个、1个或多个标量值映射到一个新的标量值。
  • UDF 需要在 ScalarFunction 类中实现 eval 方法,且必须声明为 public 类型;自定义函数中 open 方法和 close 方法可选;可被重载,即在一个 UDF 中实现多个 eval 方法。

参考阅读

[1] 用户自定义函数 https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/dev/table/functions/udfs

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020 年 11 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
web字体规范
对于设计稿的解析中,肯定是有些设计稿有特殊的字体,而这些字体可能只有设计师才有,或者只有前端拓展了系统字库才能显示器正确效果。但对于前端页面的终极使用者,他们可能系统没有这些字体,那么对于这些特殊字体究竟该如何处理? 本文通过与设计,产品,前端的统一沟通,达成共识如下。请各个前端 按照这个原则去对应的解析实现设计ui效果。
RobinsonZhang
2018/08/28
3K0
web字体规范
Qt Quick中PySide2使用qrc文件
使用步骤 创建一个 resource.qrc 文件 <RCC> <qresource prefix="/"> <file>qtquickcontrols2.conf</file> <file>images/images.png</file> </qresource> </RCC> 转换 .qrc pyside2-rcc resource.qrc -o resource.py 引用 resource.py # 在程序内引用 import resource 在程序
码客说
2021/11/25
1.5K0
Qt Quick中PySide2使用qrc文件
为Linux发行版安装中文字体
前文提到博主为自己的 ThinkPad E450 安装了一款来自爱尔兰的 Linux/GNU 发行版 作为主力系统使用。近期需要进行文字处理工作,安装了 WPS 2019 Linux 版 ,但是发现这款外来的 Linux/GNU 发行版 并没有自带一些常用的中文字体,如 宋体、仿宋、黑体 等字体,经过一番检索,博主使用从 Windows 10 家庭中文版中提取出中文字体导入,并在系统中刷新字体以使字体生效。下面就来讲讲详细步骤:
宋天伦
2020/07/16
7.5K0
详解Matplotlib中文字符显示问题
在用matplotlib进行绘图时,如果在绘制过程中会用到中文,则默认情况下会出现字体警告,中文字符显示为方框或乱码的形式,具体见下方案例:
可以叫我才哥
2021/08/05
3.9K0
让你的网站用上炫酷的中文字体
随着当前 Web 技术的日新月异,网页界面内容越来越丰富,让人眼花缭乱,其中就包括了网页中的各种自定义字体。
米开朗基杨
2019/12/19
2.9K0
CSS魔法堂:再次认识font
一、前言                                 文字承载着站点内涵,而良好的字体、排版则为用户提供舒适的阅读体验。本文打算对字体稍微深入一下子网页字体的内容,若有纰漏请大家指正,谢谢!   目录一坨: 二, 字体分类 1. 衬线体(Serif) 2. 无衬线体/非衬线体(Sans-Serif) 3. 等宽体(Monospace) 4. 手写体/书法体(Calligraphy) 5. 符号体(Symbol) 三, 再识font-family 1. 认识font-fam
^_^肥仔John
2018/01/18
2.5K0
CSS魔法堂:再次认识font
【docker】Calibre-Web——在线电子书库/漫画/CG/画集库
GitHub:https://github.com/janeczku/calibre-web
夜梦星尘
2024/08/20
7510
【docker】Calibre-Web——在线电子书库/漫画/CG/画集库
WordPress全局字体修改详细教程
有很多时候,Wordpress 的字体不能让我们满意,这个时候我们就可以通过一些方法来修改主题的默认字体,来达到我们想要的效果。
回忆大大
2021/08/09
5.9K3
Web 安全字体和网络字体 (Web Fonts)
网络安全字体是由许多操作系统预先安装的字体。虽然不是所有的系统都安装了相同的字体,但你可以使用网络安全字体堆栈来选择几种看起来类似的字体,并且安装在你想支持的各种系统上。如果你想使用预装字体以外的字体,从CSS3开始,你可以使用网络字体Web fonts - Learn web development | MDN。
泯泷、
2023/08/27
7070
VSCode插件开发:LaTeX Snippets
请注意,本文编写于 442 天前,最后修改于 126 天前,其中某些信息可能已经过时。
gyro永不抽风
2021/05/21
3.2K0
CSS编码规范
CSS作为网页样式的描述语言,在百度一直有着广泛的应用。本文档的目标是使CSS代码风格保持一致,容易被理解和被维护。
java攻城狮
2020/10/10
1.4K0
【编码规范】CSS编码风格指南
CSS 作为网页样式的描述语言,在百度一直有着广泛的应用。本文档的目标是使 CSS 代码风格保持一致,容易被理解和被维护。
一尾流莺
2022/12/10
1.1K0
在OpenOffice.org和微软Office之间共享文档
原文:Sharing files between OpenOffice.org and Microsoft Office。翻译可能也比较随意。 本文版权请向原文网站及原作者咨询。仅在已经获取原文使用权的情况下,以下文字可自由使用。本翻译未获原网站或原作者授权。 要用OpenOffice.org,不可避免的问题之一就是如何同MS Office共享文档。有些人可不想这么做,他们会建设使用HTML/PDF/RTF来共享,但这仍然不是长久之计,特别是你的老板用MS Office的时候。其实这件事不难,只要搞明白什么
张善友
2018/01/29
2.9K0
程序员每天都使用的软件
5.iTop Easy Desktop Free - Stardock Fences 的绝佳替代品。功能相似,甚至相同。优点:免费;容器快速隐藏。缺点:非开源 [?]。[旁注:iTop 提供的几乎所有东西似乎都非常有用]
mariolu
2024/06/21
2200
官宣!微软跨平台 UI 框架 .NET MAUI 6 正式发布!
欢迎使用 .NET 多平台应用程序 UI。此版本标志着我们在统一 .NET 平台的多年旅程中的新里程碑。现在,您和超过 500 万其他 .NET 开发人员拥有面向 Android、iOS、macOS 、Windows和Linux(由Github开源社区支持) 的一流跨平台 UI 技术栈,以补充 .NET 工具链 (SDK) 和基础类库 (BCL)。您可以使用 .NET 构建任何东西。
JusterZhu
2022/12/07
4.4K0
官宣!微软跨平台 UI 框架 .NET MAUI 6 正式发布!
HTML, CSS学习笔记(完整版)[通俗易懂]
.htm是早期的后缀。由于那时仅仅能支持长度为3的后缀。因此html与htm是一样的。
全栈程序员站长
2022/07/10
8700
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
现在随着互联网的发展,越来越多的公司都鼓励Mac办公,属实MacOS系统对于我们的工作开发效率有很大提升,所以我们需要收集各种类别非常好用的 Mac 应用程序、软件以及工具。作为一个资深 Mac 用户,我需要它们帮助我快乐、高效的工作,同时也分享给你们。
浅羽技术
2020/12/07
6.4K1
吐血推荐|2万字总结Mac所有应用程序、软件工具和相关资料
海量的超赞 Linux 软件
来源:gitbooks 链接:见文末 Tux 这个仓库收集了对任何用户/开发者都超赞的 Linux 应用软件。 请随意 contribute / star / fork / pull request
小小科
2018/06/20
6.3K0
css笔记
从HTML被发明开始,样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成长,为了满足页面设计者的要求,HTML添加了很多显示功能。但是随着这些功能的增加,HTML变的越来越杂乱,而且HTML页面也越来越臃肿。于是CSS便生了。
用户6362579
2019/09/29
8.1K0
css笔记
c#实战教程_ps初学者入门视频
大家好,又见面了,我是你们的朋友全栈君。 C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。 1.1 C#语言特点 Microsoft.NET(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。 用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft Intermediate Language,MSIL)代码,形成扩展名为exe或dll文件。中间语言代码不是CPU可执行的机器码,在程序运行时,必须由通用语言运行环境(Common Language Runtime,CLR)中的既时编译器(JUST IN Time,JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:  通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C++、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。  自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占用的内存空间。不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。  交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。  增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。  版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。  完全面向对象:不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。 1.2 编写控制台应用程序 使用SDK命令行工具编写控制台程序 第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢迎信息。程序的代码是这样的: using System;//导入命名空间。//为C#语言新增解释方法,解释到本行结束 class Welcome//类定义,类的概念见下一节 { /*解释开始,和C语言解释用法相同 解释结束*/ static void Main()//主程序,程序入口函数,必须在一个类中定义 { Console.WriteLine(“请键入你的姓名:”);//控制台输出字符串 Console.ReadLine();//从键盘读入数据,输入回车结束 Console.WriteLine(“欢迎!”); } } 可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.c
全栈程序员站长
2022/09/30
16.1K0
相关推荐
web字体规范
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档