Category: 程序设计

Parquet 文件简介

我在AWS亚麻迅云(S3存储)工作的时候第一次了解到Parquet文件,觉得很神奇。简单来说,就是CSV文件按列来存储。 什么是 Parquet 文件? Parquet是一个为大数据处理框架(如Apache Hadoop、Apache Spark等)优化的列式存储文件格式。它是Twitter和Cloudera之间的合作产物。作为一种列式格式,与传统的基于行的格式(如CSV或JSON)相比,它具有一些明显的优势: 压缩 由于列式存储的特性,每一列的数据更为同质,这使得它比基于行的存储具有更好的压缩比。例如,存储年龄值的列将只有整数,从而实现有效的压缩。 读取效率 对于只需要部分列的分析查询,Parquet只从磁盘读取必要的列。这比读取整行并丢弃不需要的数据更为高效。 模式进化 Parquet支持复杂的嵌套数据结构,且其模式可以随时间发展。这意味着您可以在不需要重写整个数据集的情况下添加、删除或修改列。 性能 有效的压缩和通过只读必要列来减少I/O的组合可以极大地加快大型数据集上的分析查询性能。 兼容性 Parquet得到了广泛的数据处理工具的支持,包括但不限于Hadoop、Spark、Presto、Hive、Impala等。 类型支持 Parquet支持丰富的数据结构,包括标准原始数据(整数、浮点数、字符串)和更复杂的类型(列表、映射、结构体)。 压缩算法 Parquet支持多种压缩算法,允许用户选择压缩比和解压速度之间的最佳权衡。 谓词下推 许多处理引擎可以利用Parquet的列式特性来下推某些谓词(过滤器)并只读取必要的数据块,从而进一步优化查询性能。 一个Parquet格式的最简单的例子 要更好地理解Parquet格式,与CSV这样的传统基于行的格式对比数据的存储方式是很有用的。 假设你有一个小型的数据集,记录了人们的名字和他们的年龄: CSV格式: Name, Age …

怎么样计算STEEM区块链的上线率(UpTime)和宕机时间(DownTime)

判断一个区块链是否靠谱有一个指标就是看链跑的时间久不久, 还有就是上线率/Uptime和宕机时间/Downtime, 有点类似计算服务器的上线时间. 不靠谱的链一般没几多久就停了(Halted). STEEM区块链不算新链了, 已经跑了有7年之久, 我很好奇STEEM链的上线时间和故障率, 本文就来计算一下. STEEM在过去因为链的BUG停过几次, 我记得有一次是STEEM在硬分叉的时候引起了新的资源计算模型, 但有BUG, 导致链停了, 虽然当时Steem Inc组织程序员紧急改BUG, 再号召见证人同时重启链, 不过那几天折腾过程中停了有2-3次吧. 比特币BTC据说到现在为止历史上一共停过两次. 创世纪块和时间 Steem Genesis Block and Time 每条区块链都有一个创世纪块, 也就是第一块, STEEM上的创世纪块是在 2016-03-24 16:05:00. 产生一块所需要的时间 …

ChatGPT 使用 Promise.All 重构/重写代码(并行发送请求)

在我的一个项目中, 我有以下代码(Node/Javascript), 它(顺序)调用了一些 API. 这些 HTTPS 请求其实是可以并行完成的, 因为它们相互独立. 然后结果会被聚合到一个数组中. 我知道可以用Promise.all来把这些请求并行化, 我就问了ChatGPT怎么弄, 看看它是否能理解并给出正确的代码: 我先用英文问 ChatGPT-3.5: Rewrite the following Python code using the Promise.all to parallelize the requests: let result = …

ChatGPT-4 使用 Math Wolfram 插件解决数学脑筋急转弯问题

这篇文章, 我们看一个简单的数学问题(脑筋急转弯), 并用 Python 解决它. 我们看一下LLM(大型语言模型): ChatGPT3.5和ChatGPT4. 通过 ChatGPT-Plus 订阅(目前每月 20 美元 + VAT增值税), 我们可以启用 ChatGPT-4 的插件, 因此, 我们还使用 Wolfram 插件来了解 ChatGPT-4. 数学问题: 大于95555并且有4个相同数字的最小整数 大于 95555 并且有 4 个相同的数字的最小整数是多少? …

随机数独游戏的算法设计 (Sudoku)

给定一个数独(Sudoku), 我们可以使用深度优先搜索算法(DFS), 迭代加深搜索算法(IDS)或广度优先搜索算法(BFS)来寻找可能的解. 反过来, 如果我们要设计一个算法来生成有效的数独, 我们需要澄清以下问题: 生成的数独(Sudoku)必须有可解状态吗? 是的 生成的数独(Sudoku)有多个解吗? 我们可以假设返回的Suduoku只有1个唯一解 生成的数独(Sudoku)的找解难度? 我们可以为此设置一个参数: 简单, 中等或困难 一共有6.671×10^21个有效的数独状态, 如果我们忽略旋转, 镜像状态等重复的状态, 这个数字就降到了5.4×10^9个状态. 我们可以随机生成一个由数字1-9填充的矩阵, 并检查它是否是有效的数独, 但这非常低效, 因为生成的矩阵极有可能不是有效的数独. 设计一个随机数独的算法 为了设计一个有效的算法, 生成一个随机的有效数独, 我们可以采用以下算法: 使用回溯(深度优先搜索)算法来生成一个具有随机性的有效完整数独. 例如, 我们可以随机选择数字, …

整合 ChatGPT Prompt AI到 STEEM 区块链上!

我现在是 STEEM 的 TOP 20 见证人, 高处不胜寒, 感觉不能辜负大家的期待, 得做些工作. ChatGPT 从2月份就爆火以来, 各种应用接入 ChatGPT 的API, 不过目前 ChatGPT API 还是基于 3.5版本的. 我想着整个机器人也不是难事(以前已经整过几个了), 在看视频的同时就写些代码就搞定了, 顺便还重构了一下 以便更好同时支持其它的机器人. 现在, 在STEEM 区块链上我们可以在任意帖子(暂不支持帖子本身)下回复 !ask 加个空格+你要问的问题. 不过大约需要 …

谷歌面试题: 迷宫随机生成算法

据说这个是谷歌 Google 的第一轮面试题. 一般这种题目就是: 设计一个迷宫算法 (Design a Maze). 面试中应该先问清楚需求 (Ask Clarifying Questions): 迷宫需要有几条出路? (假定至少1条), 多大的迷宫? 多复杂的迷宫等等. 最容易想到的就是随机生成1和0的地图, 其中1是墙, 0是空路, 不过这种方法生成随机的效率实在是太低, 你可以跑了半天也无法生成一个有效的迷宫, 我们假定有效的迷宫是至少含一条路径. def maze(width, height): m = None while …