越努力 越幸运

如何在 Windows 上安装编译 Spark 环境

一、写在前面的话

我知道,在你阅读这篇文章时,或许会感到很诧异:为什么会在 Windows 安装 Spark 而不是在类 Unix 系统上?

如果你是通过搜索引擎来阅读该文的话,我想你心中也有了答案。而我只是不想装个双系统,但是又想学习了解下 Spark 到底多牛,同时,我认为,如果在 Windows 上能把 Spark 玩活了的话,在类 Unix 系统上应该不成问题吧(在 Windows 上很难搞定吧)?!

本篇文章记录下在安装编译 Spark 过程中涉及的问题和解决方案作为备忘,同时也分享给大家。

二、环境准备

机器配置:

ARM: 5.00 GB

OS: win8 64bit

CPU: 2.00 GHz

在安装 Spark 之前需要为其准备一些必须的前置环境。

  1. JAVA:建议安装最新的 Java,需要注意的是,是安装 JDK 而不是 JRE
  1. Git:必须在命令行下能执行 git,因为在安装的时候有选项选择,默认是不行的,这的需要注意。
  1. scala:当前最好选择 scala 2.10.5 版本,当前的 Spark 版本对 scala 2.11.x 编译时较为麻烦。
  1. sbt:scala simple build tools,选择最新版即可。

特别注意:javac、git、scala 和 sbt 都必须在命令行下能执行,也即是必须将它们加入到系统环境变量里。

三、安装编译 Spark

现在来到了重点部分:安装编译 Spark 环境。

1. 下载 Spark

a. 在官网上下载最新版本 Spark 源码(spark-1.3.1.tgz

b. 解压到一个目录(E:\spark-learn\spark-1.3.1)

E:\spark-learn\spark-1.3.1>ls
CHANGES.txt      build   examples              pom.xml                streaming
CONTRIBUTING.md  conf    external              project                target
LICENSE          core    extras                python                 tools
NOTICE           data    graphx                repl                   tox.ini
README.md        dev     lib_managed           sbin                   yarn
assembly         docker  make-distribution.sh  sbt
bagel            docs    mllib                 scalastyle-config.xml
bin              ec2     network               sql

2. 安装 Spark

安装编译 Spark 环境需要在命令行下进行,这也是为什么需要将前置环境都加入到环境变量的原因。

全角半角转换(Python 接口)

一、背景介绍

  • 解决什么问题:快速方便的对文本进行全角半角自动转换
  • 适用什么场景:自动化测试过程中使用 Python 获取网页源码时,获取到的是全角字符,等等

二、全角半角原理

  • 全角即:Double Byte Character,简称DBC
  • 半角即:Single Byte Character,简称SBC
  • 在 windows 中,中文和全角字符都占两个字节,并且使用了 ascii chart 2 (codes 128–255);
  • 全角字符的第一个字节总是被置为 163,而第二个字节则是相同半角字符码加上128(不包括空格,全角空格和半角空格也要考虑进去);
  • 对于中文来说,它的第一个字节被置为大于163,如’阿’为:176 162,检测到中文时不进行转换。
  • 例如:半角 a 为 65,则全角 a 是 163(第一个字节)、193(第二个字节,128+65)。

全角半角示例:(文本 test.txt 包含全角和半角字符)

如何对模板类进行单元测试

一、背景介绍

在对 C++ 项目进行单元测试时,基本都在使用 gtest 进行。无论是单元测试,还是接口测试。

具体来说,就是对函数进行单元测试或接口测试,对模块进行集成测试。但是,对于模板类并没有进行测试,而是对其上层调用进行测试。

现在的问题是,对于模板类需不需要进行单元测试或接口测试?被写成模板类,说明这个类是比较通用且很多地方都在使用它,所以我认为还是有必要进行测试的。

二、如何测试单参数模板类

现有如下一个模板类:

// 不用纠结于细节,只为说明。
template <typename E>
class Queue
{
public:
    Queue()
    {
    }

    void Enqueue(const E& element)
    {
    }

    E* Dequeue()
    {
    }

    size_t size() const 
    {
        return (size_t)123;
    }
};

那么使用 gtest 该如何对该类进行测试呢?

使用 C/C++ 扩展 Python

一、需求背景

Python 几乎能解决你所遇到的所有问题,但是 Python 常被人提及的问题就是速度问题,这时如果你想提升 Python 的速度,基本都会使用 C/C++ 来扩展 Python 接口,这种方法仅仅是提升 Python 速度的诸多方法中的一种而已。

同时,对于一些使用 Python 来解决的问题比较棘手时,也可以考虑使用 C/C++ 来扩展 Python 接口,这样再调用的时候,就会减少一些 Python 带来的麻烦。

基于不同的平台,使用 C/C++ 扩展 Python 接口时,产生的文件也不一样(*.so*.dll),然后将其改为合适的后缀(windows须将 *.dll 改为 *.pyd),本文使用 Win7 和 VS2013 来编写 Python 扩展。

二、准备工作

使用 VS2013 新建一个工程,并做如下操作:

  • 设置 Configuration Type 属性为 Dynamic Library(.dll)
  • 选择 Release 模式(因为没有 python27_d.lib 文件)
  • 添加 python 头文件路径(默认为 C:\Python27\include\)
  • 添加 python 库文件路径(默认为 C:\Python27\libs\)
  • 可以将 include 和 libs 拷贝放到一个文件夹下,然后放在工程目录

三、Python 对象

Python 对象在 Python 解析器中都为 PyObject

而在 C/C++ 中只能声明为 PyObject* 类型的 Python 对象,然后使用该对象对应的初始化函数进行初始化。

如:PyTuple_New, PyList_New, PyDict_New, Py_BuildValue 等。

如何构建一个 {'key1': {'key2': ['valuex', 'valuey']}} 对象?