概述随着硬件技术的发展,当前计算引擎的瓶颈已经从之前的IO(网络、存储等)重新变为了CPU,也就是计算的优化重新成为了当前发展的主流方向。其中,向量化计算引擎是近几年非常火热的发展方向,比较受人关注的是 Databricks 为 Spark 开发了基于 JNI 的 native engine – Photon,使...
Read More概述在开发过程中,Singleton 是一个非常常用的模式,例如,系统配置、内存管理等全局唯一的实例都需要使用单例。在 C++ 11 之前,实现一个线程安全的单例需要一些特别的 trick。本文介绍 C++ 11 之后的实现方式,非常的简单。实现实现的关键点: 构造函数设置为 private 拷贝和移动的构造...
Read MoreApache Arrow 是一个内存的列式存储格式,其生态已经非常丰富,包含了计算引擎(gandiva、arrow compute layer等,计算向量化)、IPC 格式、网络传输 flight等。
Read More二叉树的前序(preorder)、中序(inorder)、后续(postorder)遍历是非常经典的遍历方式,其中中序遍历较为常用,因为二分查找树按照中序遍历获得的就是有序的数组。
Read More本文主要是通过斐波那契来引入问题,开始逐步分析递归的解法缺点,使用缓存和尾递归进行优化,最后将尾递归展开为循环迭代逻辑,通过这个思路来加深对递归的理解。
Read More概述随着 Hadoop 生态的快速发展,海量数据的处理的方法已经非常成熟并且丰富了,但是这些处理方法一般都是批处理方式,也就是输入的数据是确定的,例如1小时的日志,在日志已经准备好之后再开始计算。当今产品业务的快速发展,在很多场景(反作弊等)下对数据处理的时效性提出了新的要求,要求更高的时效性。于是,流式计算就逐...
Read More正文转眼已经工作了6年多了,一直从事大数据相关的工作,对整个大数据发展的趋势有个人比较浅显的理解。本文主要从Google的几篇论文来简单看一下这些年大数据的发展历程,梳理一下技术发展的脉络。Google是最早提出大数据概念,并且横空出世了三驾马车(MapReduce、GFS、BigTable),MapReduce...
Read More概述数学是笔者的短板,最近一直在积极恶补数学,重新学习了微积分中的泰勒展开式,对其有了一点简单的理解,所以记录在这里。简单介绍泰勒展开式是一个在函数某点对函数进行近似的方法,在几何图形上来理解就是泰勒展开式的曲线与原函数的曲线的拟合。展开式的项是无穷多的,随着项的增加拟合的程度就越好。看下面的图是 e^x 与其4...
Read More概述Python 中的 list 和 dict 是非常常用的数据结构,但是因为我们大多数人的第一门语言都是 C++ 或 Java,在使用 Python 的过程中,会套用之前语言的思维,而不是 Pythonic 的方式。本文提供一些使用建议,希望可以帮助大家写出更 pythonic 的代码。list 遍历list ...
Read More本文是笔者重写了旧博客中的python使用set来去重碰到TypeError: unhashable type,并增加了一些更为深入的内容。
Read More本文是笔者重写了旧博客中的Python的问题解决: IOError: [Errno 32] Broken pipe,并增加了一些更为深入的内容。
Read More前言在 Scala 中有一个强大的语言特性 implicit,提供了非常特殊并且强大的隐式转换功能。说它特殊,主要是因为在笔者目前接触到的语言中,也没有发现类似的语法,对于笔者来说这个特性非常的神秘。功能强大是因为这个特性确实好用,笔者在实际项目中进行了简单的尝试,发现对简化代码非常有帮助,可以替代默认参数,并且...
Read More随着下一代大数据计算框架 Spark 的流行,Scala 也受到了越来越多的关注。在 Scala 开发中,免不了需要编写单元测试,这样可以提升开发效率,方便地进行回归测试。在实际业务开发中,业务需求变更会引入大量的逻辑,通过单元测试可以很好地保障现有代码的逻辑依然符合预期,前提是单元测试的 case 覆盖较为全面。
Read More引子本文记录了一次笔者对 Spark SQL 使用中碰到的问题的分析,使用的 Spark 版本为 2.1。本文描述的是一个已经在新版本(2.2及以后)中修复的问题,记录了整个问题的代码分析过程,希望可以对碰到类似的问题的朋友一点启发。在分析过程中,也窥视了 Spark 的一些内部实现。基本结论:由于 UTF8St...
Read More背景计算机科班出身大多学过离散数学,或者理工类专业也大多学习过 C 或 C++ 语言,从中我们了解到基本类型的整形有 short、int、long 等,还分别有无符号(unsigned)和带符号(signed)的,但是不是所有语言都支持无符号。Java 就是这样一门语言。但是,在工程实践中,我们难免会有一些场合会...
Read More简介Apache Spark 目前越来越流行,在实际开发使用过程中,会需要使用到一些 C/C++ 的类库,需要使用 JNI 来调用,本文通过一个简单的例子来对 Spark 使用 JNI 进行讲解。本文的测试环境是 Linux,其他环境类似,但是不保证 C++ 等代码可以在其他系统下编译使用,Spark 版本使用的...
Read More日志是程序调试的利器,通过日志来解析获取数据,线上问题通过日志分析和定位等,用途多种多样。Python 作为当前常用的一门开发语言,国内很多开发者对其的使用极其粗糙,写法较为随意,受开发者本身熟悉的语言有关,会参入较多其他语言的写法。
Read More