Hive相关知识

1. 手工添加分区

(1) hadoop fs 拷入文件

(2) 还需要在hive中 add partition,分区才可以被hive承认;否则,找不到对应分区。

2. 复制表结构

1
2
CREATE TABLE target_table LIKE source_table

3. 给Hive表加锁,防删除或防查询

ALTER TABLE tableName ENABLE/DISABLE NO_DROP/OFFLINE
阅读全文 »

我的Hadoop MapReduce模板

行走江湖,有一套自己顺手的模板是很重要的,可以在很多时候提高开发效率,减少重复劳动力。

阅读全文 »

[转]清华生的多年奋斗领悟

原文链接不详
转载自:http://hi.baidu.com/1qqqqcom/item/7715ecd8bc40950820e2501b

我的摘录

  1. 成功的人都有的共同特点——勤奋且坚韧不拔,目的性强善于学习,从不抱怨规则的不公平而是善于从不公平的规则中找到有利于自己的漏洞。

  2. 再烂的东西都有它的优点。 你今天学一点,明天学一点才会有所提高。否则除了骂社会,你什么都不会,一辈子白活。看别人要看优点,看自己要看到缺点。

  3. 凡事不要蛮干,要利用其他人的能力和资源。

  4. 平日,看到别人的成就,我一定会感慨:“为什么他的机会这么好?为什么我就赶不上,如果我生于他那个时代,我将怎样怎样。但我没有,所以我什么也做不了。”长此以往,我就看见一个个机会从我身边溜走,然后再一次次地发出这样的感慨。那么,我会永远在蹉跎叹息中度过,碌碌无为。

    终于我发现,这种感慨不过是出于嫉妒和懦弱的感情,为自己的懒惰找一个冠冕堂皇的借口。如果我当年不是每天回去打魔兽,不是每天上班先要打开电脑泡会儿论坛,而是把这些时间在自我提高,那我就能抓住那次房价大涨的扩张期,做到更高的职位,拿到更好地薪水。于是,机会溜走了。

    人生路上总有好多的岔口,当时选哪一条路往往很偶然。既然选择了一条的时候,另一条就关上了大门,那我们何必停下来,去感慨如果当初选了另一条会怎样怎样,自增烦恼。还不如勇往直前往前闯。临渊慕鱼,不如退而结网

  5. 老祖宗讲过这么两句话,我觉得很深:一句叫静坐常思己过,闲谈莫论人非。还有一句叫露巧不如藏拙。

  6. 人就是这样,不是说成绩有多么重要,但是优秀是一种习惯,懒惰是一种惯性。人和人的差别又是就是因为每天积累差了一点点,终于有天你发现,原来我和他差了这么多。

    如果离成功只有一步之遥,那谁都会咬牙坚持下来;如果忽然发现距离很远,那谁都会放弃。而关键的一咬牙,上了一个层次,有人就会春风得意,越活越成功;有人没上去,永远在苦逼中挣扎求生存。然后想,原来在当时,我们俩的距离才那么近。

  7. 大学的意义在于他给你打开了一片天,让你看的更远,让你知道原来在这个山头之外还有一个更高的山头。并不意味着你已经达到了那个山头,但你有了往上爬的方向,同时他给你聚集了一帮志同道合,以后可以互相扶持的社会单元。所以完全不必短视和急功近利,人生那么长,炫耀是做给别人看的,本事是自己,好像跑马拉松,一时谁跑得快慢不重要,关键是谁跑到了最后。

阅读全文 »

蓄水池抽样(reservoid sampling)

缘起一道算法题目:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录?(n未知)

花了点时间,终于搞清楚了这个问题的正确解法以及证明方法,而我觉得目前为止网络上的许多证明都是错的! 所以我才想重新写写。

让我们先从头开始——

1.开胃小菜,从m = 1开始说起

有一个数据流持续输入,在不知道流具体大小的情况下,怎么样才可以保证从流中公平地(即保证每一个元素被选中的概率是等可能的)获取一个样本?

1.1 算法大意

为方便起见,假设下标是从1开始的

假设流数据为: stream[1], stream[2], stream[3], …, stream[n] (n在程序运行地过程中并不知道)

单凭直观感觉,这题并不难解,

首先在第1个元素到来的时候我们先暂定目标元素result = stream[1];

当第2个元素到来的时候,我们以1/2的概率来决定,result 是否要剔除原先的stream[1]换成stream[2];

当第3个元素到来的时候,我们以1/3的概率来决定result是否要被替换成stream[3];

同理,当第i个元素到来的时候,我们以1/i的概率来决定result是否要被替换成stream[i];

阅读全文 »

有关约瑟夫环问题(Josephus Game)

n个小朋友手拉手围成一个圈,给定一个数字m。

这时以第一个小朋友为起点开始报数,数到m的小朋友出列;

m的下家为新的起点,开始重新开始报数;

如此反复,一直到剩下最后一个小朋友。

请问如何可以求得这最后的小朋友是谁?

最容易想到的就是写个程序直接模拟游戏的全过程

动态规划的解法要更加的优雅简单

定义方法:getSurvive(n, m) 返回(n,m)的最终生还者编号。

1
2
3
4
5
6
7
8
9
10
11
12
def getSurvive(n, m):
if n == 1:
return 0
else:
return (getSurvive(n - 1, m) + m) % n

[排序算法]关于Top-k排序(优先队列Priority Queue)

在实际应用中,常有这样一种情况,对于一大堆杂乱无章的数据(大小为n),我们需要的往往只是其中最小或者最大的前k位,而之后的数据对我们没有任何意义,普通的排序算法在这个时候就显得有点不合时宜了,特别是当k << n时,简直是杀鸡用牛刀,还浪费了大量磨刀的时间。

1. Appetiser, first! 先来点开胃菜

实例:假设手头上有100万个数字,而现在只需要知道其中数值最大的100个数,那么应该怎么办?

Part I.方法选择

方案一

使用常规排序算法对所有条目进行排序,接着再选取Top-100。

这种方法之前已经说过,在这种情景下效率偏低,不太合适。

在使用快排的情况下,时间复杂度为O(nlogn)) = O(100wlog100w)

方案二

使用堆排序(Heap Sort)(或者更具体一点说应该是使用k-堆排序)[专业术语叫做:优先队列(Priority Queue)]

这便是这篇文章所要具体介绍的方法。(不过方案二给出的方法并不是最好的解决方案)

阅读全文 »

k-NN(k Nearest Neighbor)

直观理解

  k-NN是一种基于“物以类聚人以群分”思路的分类方法。

  

  以下图为例,小明为刚加入这个班级不久的新同学,在挑选兴趣小组时稍微犯了点难,因为他好像对什么都不太感兴趣,但是经过一周和班上同学的接触,小明和同学们的亲疏程度已经有了自己的判断,在图中以距离的形式表现了出来,距离越近的关系越好。

  那么,在如何给小明划分群体的这个问题上,我们就可以使用k-NN来进行判断。我们取k = 6,即认为小明的群体划分是以和他关系最好的6个人来判断的,明显,图中和小明最亲近的6个人中,5个是活泼调皮类型的,1个是文静类型的,因此我们可以大致判断,小明有比较大的可能也是属于活泼调皮类型的。

小明

但是如果考虑k > 10的情况,例如k = 11,那么我们可以发现,11个人中,5个活泼好动,另外6个文静,则按照k-NN的思想,我们认为小明是属于文静类型的人。

阅读全文 »

Perceptron(感知机)

综述

所谓的“感知机”这个名词显得有点名不副实,因为我实在没觉得它的机制和感知不感知有什么联系,容易误导不明真相的群众。

其实不过就是二类分类的线性分类模型,一种将实例划分成为正负两类的判别模型。得到实例的输入之后,再输出值(只能是+1和-1这两个值)。

感知机学习的终极目标就是通过训练样本最终找到一个能将正负类型隔开的一个超平面。

直观的几何理解:

分类

理论定义

假设输入空间(特征空间)是 \(X \subset R^n\) ,输出空间是\(Y \in {+1, -1}\)。 输入\(x \in X\) 表示实例的特征向量,对应于输入空间(特征空间)的点;输出\(y \in Y\)表示实例的类别。 由输入空间到输出空间当然如下函数成为感知机。

$$f(x) = sign(w \cdot x + b)$$

其中,

(1) w,b为感知机模型参数,sign()为符号函数

(2) x - 空间中的一个点,它是一个n维向量:\( (x^{(1)}, x^{(2)}, …, x^{(n)}) \)

(3) y - 对应于x的分类,取值{-1,1},一般认为当x在超平面S上时取+1(与S法向量同方向);反之则取-1

(4) w - 权值(weight)或权值向量(weight vector)

(5) b - 偏置(bias)

(6) \(w \cdot x\) 表示 向量w 和 x的内积.

(7) sign() - 符号函数,即

$$sign(x) = \begin{equation}\begin{cases} 1, x \geq 0 \\
0, x < 0 \end {cases} \end{equation}$$

阅读全文 »