Unicode 字符编码详讲

Unicode 又称为统一码、万国码、单一码,是国际组织制定的旨在容纳全球所有字符的编码方案,包括字符集、编码方案等,它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台的要求。

Unicode的实现方式不同于编码方式。一个字符的Unicode编码确定。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)。

Unicode 与 UTF-X 的关系:Unicode 是字符集,UTF-32/ UTF-16/ UTF-8 是三种常见的字符编码方案。

阅读更多

PTV Visum 简介

PTV Visum 是世界领先的交通规划软件,更加具体一点,是领先的多模式出行规划和宏观交通模拟软件,专为交通规划人员设计,以增强城市能力:

  • 进行流量分析,预测和基于 GIS 的数据管理
  • 模拟所有道路使用者以及不同交通方式之间的互动
  • 规划公共交通服务
  • 制定先进并面向未来的交通策略和解决方案
阅读更多

Spark 的序列化问题总结

Java 序列化

Java 序列化就是指将一个对象转化为二进制的 byte[] 数组,然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。序列化常被用于数据存取和通信过程中。

一个 Java 对象要能序列化,必须实现一个特殊的 java.io.Serializable 接口,它的定义如下:

1
2
public interface Serializable {
}
阅读更多

Spark 项目 jar 包依赖冲突问题总结

Spark 项目 jar 包加载顺序

当我们编写的 Spark 项目的依赖较多时,提交运行任务时便很容易出现因为包冲突导致的 java.lang.NoSuchMethodError 报错。原因是当用户提供 Spark 任务运行时,Spark 需要首先加载自身的依赖库(jars),一般位于 $SPARK_HOME/jars 目录下,然后再加载用户提交的 jar 包,当两者存在同样的 jar 但是版本不同时,如果高低版本不能互相兼容,则会报错。

Spark jar 包加载顺序:

  1. SystemClassPath: $SPARK_HOME/jars 即 Spark 安装时候提供的依赖包
  2. UserClassPath: Spark-submit --jars 用户提交的依赖包
  3. UserClassPath: Spark-submit app.jar 用户的 Spark 任务 jar 包
阅读更多

Pandas DataFrame 之 groupby()

groupby()

groupby() 方法定义:

1
2
3
4
5
6
7
8
9
10
11
DataFrame.groupby(
by=None,
axis=0,
level=None,
as_index=True,
sort=True,
group_keys=True,
squeeze=NoDefault.no_default,
observed=False,
dropna=True
) -> DataFrameGroupBy
阅读更多

Hadoop 文件系统

Hadoop 有一个抽象的文件系统概念。Java 抽象类 org.apache.hadoop.fs.FileSystem 定义了 Hadoop 中一个文件系统的客户端接口,并且该抽象类有几个具体实现,其中常用的如下表:

文件系统 URI 方案 Java 实现 描述
Local file:///path fs.LocalFileSystem 使用客户端检验和的本地磁盘文件系统。使用 RawLocalFileSystem 表示无校验和的本地磁盘文件系统。
HDFS hdfs://host/path hdfs.DistributedFileSystem Hadoop 的分布式文件系统
FTP ftp://host/path fs.ftp.FTPFileSystem 由 FTP 服务器支持的文件系统
SFTP sftp://host/path fs.sftp.SFTPFileSystem 由 SFTP 服务器支持的文件系统
阅读更多

Spark 之自定义输出格式写入文件

Spark 常用的保存文件方式

  1. RDD 保存至文本文件
    1
    rdd.saveAsTextFile("path/result")
  2. RDD 以指定 Hadoop 输出格式保持至文件,仅支持 (key,value) 格式的 RDD
    1
    rdd.saveHadoopFile("path/result",classOf[T],classOf[T],classOf[outputFormat])
  3. DataFrame 以指定格式保持至文件
    1
    df.write.mode("overwrite").option("header","true").format("csv").save("path/result")
    以上都简单的,最普遍的保存文件的方式,但有时候是不能够满足我们的需求,使用上述的文件保存方式保存之后,文件名通常是 part-00000 的方式保存在输出文件夹中,并且还包含数据校验和文件 part-00000.crc.SUCCESS 文件,其中 part-00000.crc 用来校验数据的完整性,.SUCCESS 文件用来表示本次输出任务成功完成。
阅读更多

Spark 之 RDD、DF、DS 创建与转换

Resilient Distributed Datasets(RDD)

RDD 是 Resilient Distributed Datasets(弹性分布式数据集)的缩写,是 Spark 中一个重要的抽象概念,它表示跨集群节点且被分区的数据集合,可以并行操作。Spark 为 RDD 提供了丰富的操作算子,可以高效处理数据。

创建 RDD

有两种创建 RDD 的方式:并行化驱动程序中的现有集合,或引用外部存储系统中的数据集,例如共享文件系统、HDFS、HBase 或任何提供 Hadoop InputFormat 的数据源。

1
2
3
4
5
6
7
8
// 创建 SparkContext
val conf = new SparkConf().setAppName(appName).setMaster(master)
val sc = new SparkContext(conf)
// 并行化集合
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)
// 外部文件
val distFile = sc.textFile("data.txt")
阅读更多

Git 学习记录

Git 是目前世界上最先进、最流行的分布式版本控制系统。Git 采用 C 语言开发,并完全免费开源,由 Linus Torvalds 发起,并作为主要开发者。他同时还是 Linux 内核的最早作者,担任 Linux 内核的首要架构师与项目协调者。

阅读更多