A Libertine of Computer Science

Understanding of Spark Structured Streaming Execution via Source Code [通过源码理解Spark的结构化流执行]

Last Updated: Jan. 17, 2022

Spark 2.0引入了更高级别的新的流处理API,叫做Structured Streaming[结构化流]。本文通过Spark的源代码来理解具体的Structured Streaming的执行过程。本文使用的是Spark 2.4.0的源代码。Structured Streaming相关的源代码存在于sql文件夹中。

Understanding and Installing Nvidia Docker [Nvidia Docker 介绍和安装]

前文所述,Docker是一个轻量级的容器,将应用程序,第三方库,数据文件和环境放在一起使用户可以最大程度使用宿主机的硬件。Docker容器是平台无关[platform-agnostic]和硬件无关[hardware-agnostic],这说明Docker对于一些通用的硬件已经有很好的支持,但是当使用特殊的硬件,如NVIDIA GPUs时,这就产生了一个问题,这些硬件需要内核模块和用户级库来操作,也就是我们常说的驱动程序。

Docker Volume [Docker Volume 介绍]

Docker镜像是由多个文件系统[只读层]叠加而成。当我们启动一个容器的时候,Docker会加载只读镜像层并在其上[镜像栈顶部]添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,然后在读写层进行修改,但是文件的只读版本仍然存在于只读层,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失。所以默认情况下,数据在Docker运行时无法进行持久化操作。

Python Multi-Inheritance [Python多重继承]

虽然 Python 不是一个专门的面向对象的语言,但是 Python 仍然有着优秀的封装,继承,多态的机制。其中继承尤其是多重继承是在复杂项目中经常用到的。但是多重继承在使用的过程中有很多需要注意的地方,以至于很多开发人员都会尽量避免使用多重继承。

Python Variable-Length Arguments [Python不定长参数]

我们在使用调用 python API 的时候,经常能够看见在参数列表的最后有两个“奇怪”的参数*args, **kwargs。首先要明白,其实并不是必须写成*args**kwargs。只有变量前面的***才是必须的。这两个参数的用法就是 python 中的不定长参数[当然了,大多数语言都支持不定长参数]。

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17]