成功学

昨天早上挤地铁,挤上去了就拿出手机看电子书,无意中看见旁边妹子也在看书。抬头赫然几个大字,“老板无能,你就赢了” 。看了无语了,我看过国人写的类似的书,基本说的是老板太厉害,就会掩盖自己的锋芒,能力无从发挥,对发展不利。而老板无能,自己就有机会表现及上位之类。

这种言论中的错误,懂管理学的对这种低级错误真是完全不值得批驳,看书真的也是不能瞎看。不知道从什么时候开始,国人写的书越来越多此类。教你的是要厚黑,要交际,要培养个人魅力,交往里把人当做资源来利用。告诉你世界是现实的,个人品德以及修养已经不再需要了。但是用心思考你就会注意到这些理论缺少实质内容,做了过度承诺,而又经常无法兑现(over promising and under delivering)。

这套理论确实有很多信徒,他确实符合了一部分读者贬低上级的发泄的需要,想做出一番成绩,就需要和一群优秀的人,比自己更优秀的人在一起。跟着一个无能的老板,那请你离开。

项目与产品

做项目的看到做产品的来钱快,不免都心生嫉妒,想做起产品。

想做产品,但是又不愿意投入,那就只能在项目中产品,或者说从项目中提炼产品。

这个过程中,产品经理这个角色往往是缺位的。而在项目里大家所谓做产品,考虑的也仅仅是模块耦合性低一点,功能通用一点,设计上更灵活一点。主要考虑的是降低下次同类项目的实施成本。而不是产品所面对的用户。

项目中做产品往往是失败的。做项目考虑的是如何在限定的时间内完成既定的需求。项目经理仅考虑完成本期项目需求。为了保证实施及交付进度,就必须做出各种妥协。

产品经理和项目经理的区别应该是:产品经理从业务上规划产品, 包括产品的功能和运营, 为产品的成就负责.项目经理从技术上实现产品, 为产品的稳定和进度负责.

项目经理和产品经理这两个两个角色。有个很简单的区分办法:项目经理在跟进项目的同时兼任开发, 产品经理在跟进项目同时兼任产品设计.项目用传统的瀑布开发模型来开发都能做,但是做产品不用上敏捷,做出来的肯定不是一个面向客户的产品。

做产品,项目组内部成员统一思路也很重要。很快你就会发现项目成员的需求讨论,开发过程中有个问题。还是按照传统项目的实施思路,害怕客户提出新的需求。在讨论一个新功能的时候,最常见的一句话就是“如果我们做了XXX,客户又想要YYY那怎么办” 这恰恰是敏捷方法论早就指出的,如果一个项目实施结束时所完成的产品,和项目开始前的设计一致。那么着必然是一个失败的产品。随着项目的进展,实施方和客户都会对项目有了更深的理解,必然会提出更符合实际需要的需求。所以以前经常瀑布模型开发出来按所谓的产品,做出来了,连自己都不爱用。可想而知客户的反应。

做产品,有时候又会走向另外一个极端。在和一些用户讨论功能设计的时候,经常会注意到人们有一种追求过度灵活度的倾向,即超出可以想见的实际需求,一味追求 API 和功能上的极端灵活性。这种倾向其实是有害的,首先过度灵活的东西会大大提高实现的复杂度,给性能打上不小的折扣,其次,因为缺乏可预见的实际需求,投入产出严重不成比例。

Hive 中使用多字符字符串作为字段分隔符

Hive建表语句中得FIELDS TERMINATED BY 只能是单字符,遇到多字符作为分隔符的就尴尬了。目前我们的字段分隔符是’@#@’ 。遇到这个问题除了变更分隔符外,hive也可以使用serde的方式来支持多字符作为分隔符。

例如一个分隔符为’@#@’的数据,有3个字段

create table hive_test(
id string,
tour_cd string,
flt_statis_cd string )
ROW FORMAT
SERDE ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe’
WITH SERDEPROPERTIES
( ‘input.regex’ = ‘^([^@#]*)@#@([^@#]*)@#@([^@#]*)’,
‘output.format.string’ = ‘%1$s %2$s %3$s ‘)
STORED AS TEXTFILE;

input.regex 就是按照java的字段分割正则表达式方式编写。

output.format.string 按照顺序往后递增即可。

需要注意的是,字段类型只支持string,不然就会报错:

FAILED: Error in metadata: java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.contrib.serde2.RegexSerDe only accepts string columns, but column[3] named id_valid_ind has type int)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

建完以后就可以往hive表里面load数据了。但是用的时候很可能报这个错。

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.contrib.serde2.RegexSerDe
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:891)
	at org.apache.hadoop.hive.ql.exec.MapOperator.initObjectInspector(MapOperator.java:233)
	at org.apache.hadoop.hive.ql.exec.MapOperator.setChildren(MapOperator.java:366)
	... 33 more

执行add jar 命令 将hive-contrib.jar 加入再执行hive语句即可

 

hive> add jar /usr/lib/hive/lib/hive-contrib-0.9.0-Intel.jar;
Added /usr/lib/hive/lib/hive-contrib-0.9.0-Intel.jar to class path
Added resource: /usr/lib/hive/lib/hive-contrib-0.9.0-Intel.jar

一个带分区的外部表,自定义多字符字符串作为分隔符的建表语句例子

 

create EXTERNAL table hive_test(
seg_fr_bs string,
tour_cd string,
flt_statis_cd string )
PARTITIONED BY(dt STRING)
ROW FORMAT
SERDE ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe’
WITH SERDEPROPERTIES
( ‘input.regex’ = ‘^([^@#]*)@#@([^@#]*)@#@([^@#]*))’,
‘output.format.string’ = ‘%1$s %2$s %3$s’)
STORED AS TEXTFILE
LOCATION ‘/user/adhoc/file/pir2_base_ics_wxl’;