W***o 发帖数: 6519 | 1 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20
个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以
我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key,
然后这个key所对应的value就是sum of the occurrences of theft in 2005.
请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢 |
p*****2 发帖数: 21240 | |
W***o 发帖数: 6519 | 3 坦白说是个distributed system的作业,规定必须用Hadoop解决,想问问像二爷您这样
的大牛这思路对不对
。谢谢您
【在 p*****2 的大作中提到】 : 才6G, mongodb就搞定了吧?
|
l*n 发帖数: 529 | 4 完全可以。
20
,
【在 W***o 的大作中提到】 : 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20 : 个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以 : 我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key, : 然后这个key所对应的value就是sum of the occurrences of theft in 2005. : 请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢
|
l*******m 发帖数: 1096 | 5 laptop一分钟搞定
20
【在 W***o 的大作中提到】 : 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20 : 个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以 : 我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key, : 然后这个key所对应的value就是sum of the occurrences of theft in 2005. : 请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢
|
p*****2 发帖数: 21240 | 6
能用Hive吗?
【在 W***o 的大作中提到】 : 坦白说是个distributed system的作业,规定必须用Hadoop解决,想问问像二爷您这样 : 的大牛这思路对不对 : 。谢谢您
|
b**********5 发帖数: 7881 | 7 唉, 我再来抱怨一下, IT真的是青春饭。 我以前的学校, 读书的时候,
mapreduce这个词, 听都没听说过, 然后工作里, 也从来没用过。 resume上, 还
不如一个大学生。。。 |
p*****2 发帖数: 21240 | |
p*****2 发帖数: 21240 | 9
我学校里binary search都没听说过,怎么算呀?
【在 b**********5 的大作中提到】 : 唉, 我再来抱怨一下, IT真的是青春饭。 我以前的学校, 读书的时候, : mapreduce这个词, 听都没听说过, 然后工作里, 也从来没用过。 resume上, 还 : 不如一个大学生。。。
|
W***o 发帖数: 6519 | 10 好,谢谢。为了写这个作业,我是刚开始自学hadoop,请问哪里有用pair-value做key
的example吗?或者麻烦您或哪位给写一下基本的code?
【在 p*****2 的大作中提到】 : 你这么做没啥问题。应该算是很基本的应用了。
|
|
|
b**********5 发帖数: 7881 | 11 binary search is not a hot key word... and one can learn binary search with
3 min and says he's an expert at binary search....
【在 p*****2 的大作中提到】 : : 我学校里binary search都没听说过,怎么算呀?
|
W***o 发帖数: 6519 | 12 求点播,求思路,谢谢
【在 l*******m 的大作中提到】 : laptop一分钟搞定 : : 20
|
p*****2 发帖数: 21240 | 13
key
theft_2005就可以了
【在 W***o 的大作中提到】 : 好,谢谢。为了写这个作业,我是刚开始自学hadoop,请问哪里有用pair-value做key : 的example吗?或者麻烦您或哪位给写一下基本的code?
|
c*****a 发帖数: 808 | 14 Map Text做的key,
大概这样不行吗
mapper
context.write(new Text("theft_2005"), new LongWritable(val))); |
l*******m 发帖数: 1096 | 15 用R, 或者python pandas. 8G RAM就够了
【在 W***o 的大作中提到】 : 求点播,求思路,谢谢
|
W***o 发帖数: 6519 | 16 谢谢,明天试试
只懂Java, R 和python不熟,都是现用现搜
【在 p*****2 的大作中提到】 : : key : theft_2005就可以了
|
j**w 发帖数: 382 | 17 Yes, in Hadoop, as long as a class implements WritableComparable, it can
serve as keys for Map/Reduce.
http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/io/W
U R Welcome
20
,
【在 W***o 的大作中提到】 : 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20 : 个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以 : 我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key, : 然后这个key所对应的value就是sum of the occurrences of theft in 2005. : 请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢
|
l*n 发帖数: 529 | 18 http://codingjunkie.net/secondary-sort/
http://vangjee.wordpress.com/2012/03/20/secondary-sorting-aka-s
你已经找对方向了。
key
【在 W***o 的大作中提到】 : 好,谢谢。为了写这个作业,我是刚开始自学hadoop,请问哪里有用pair-value做key : 的example吗?或者麻烦您或哪位给写一下基本的code?
|
l*n 发帖数: 529 | 19 其实map reduce也一样啊,也是能3分钟学会的。但是就跟binary search有无数变种、
应用一样,map reduce也是变化多就是了。
with
【在 b**********5 的大作中提到】 : binary search is not a hot key word... and one can learn binary search with : 3 min and says he's an expert at binary search....
|
W***o 发帖数: 6519 | 20 再请教一下大家:
下面是我的mapper code:
public class CrimeMapper extends Mapper
IntWritable>
{
protected static final int DATE_INDEX = 2;
protected static final int CRIME_TYPE_INDEX = 5; // column index
protected static final int YEAR_INDEX = 17; // column index
private static final Log _log = LogFactory.getLog(CrimeMapper.class);
private static final IntWritable ONE = new IntWritable(1);
@Override
public void map(LongWritable key, Text value, Context context) throws
IOException, InterruptedException {
String[] tokens = value.toString().split(",");
String crimeType = tokens[CRIME_TYPE_INDEX].trim();
int year = Integer.parseInt(tokens[YEAR_INDEX].trim());
CrimeTypeKey theKey = new CrimeTypeKey(crimeType, year); // this is
for creating a new composite key
context.write(theKey, ONE);
_log.debug(theKey.toString() + " => " + ONE.toString());
}
}
} catch (Exception e) {
}
}
大家看看这个行吗?还有,hadoop/mapreduce 里的这个map() method里的参数Text
value,这个就是parse CSV来的一个line/row的String? 我再用.split分开行不行?有
没有更高效的parsing 方法?
【在 l*n 的大作中提到】 : 其实map reduce也一样啊,也是能3分钟学会的。但是就跟binary search有无数变种、 : 应用一样,map reduce也是变化多就是了。 : : with
|
|
|
W***o 发帖数: 6519 | 21 这个是我CrimeTypeKey的class,生成composite key object:
public class CrimeTypeKey implements Writable, WritableComparable<
CrimeTypeKey>
{
private Text key = new Text();
private IntWritable year = new IntWritable();
public CrimeTypeKey() { }
public CrimeTypeKey(String k, int y)
{
key.set(k);
year.set(y);
}
public static CrimeTypeKey read(DataInput in) throws IOException
{
CrimeTypeKey keytp = new CrimeTypeKey();
keytp.readFields(in);
return keytp;
}
public void write(DataOutput out) throws IOException
{
key.write(out);
year.write(out);
}
public void readFields(DataInput in) throws IOException
{
year.readFields(in);
key.readFields(in);
}
public int compareTo(CrimeTypeKey that)
{
int cmp = this.key.compareTo(that.getKey());
if (cmp == 0) cmp = that.getYear().compareTo(this.year);
return cmp;
}
@Override
public boolean equals(Object y)
{
if (y == this) return true;
if (y.getClass() != this.getClass()) return false;
if (y == null) return false;
CrimeTypeKey that = (CrimeTypeKey) y;
if (!this.key.equals(that.key)) return false;
if (this.year != that.year) return false;
return true;
}
public Text getKey()
{
return key;
}
public IntWritable getYear()
{
return year;
}
public void setKey(String k)
{
key.set(k);
}
public void setYear(int y)
{
year.set(y);
}
@Override
public int hashCode()
{
int result = year != null ? year.hashCode() : 0;
result = 31 * result + (year != null ? year.hashCode() : 0);
return result;
}
@Override
public String toString()
{
return (new StringBuilder())
.append('{')
.append(key)
.append(',')
.append(year)
.append('}')
.toString();
}
}
【在 W***o 的大作中提到】 : 再请教一下大家: : 下面是我的mapper code: : public class CrimeMapper extends Mapper: IntWritable> : { : protected static final int DATE_INDEX = 2; : protected static final int CRIME_TYPE_INDEX = 5; // column index : protected static final int YEAR_INDEX = 17; // column index : : private static final Log _log = LogFactory.getLog(CrimeMapper.class);
|
l*n 发帖数: 529 | 22 csv要么用apache的csv库,要么就直接regexp吧。
【在 W***o 的大作中提到】 : 再请教一下大家: : 下面是我的mapper code: : public class CrimeMapper extends Mapper: IntWritable> : { : protected static final int DATE_INDEX = 2; : protected static final int CRIME_TYPE_INDEX = 5; // column index : protected static final int YEAR_INDEX = 17; // column index : : private static final Log _log = LogFactory.getLog(CrimeMapper.class);
|
W***o 发帖数: 6519 | 23 谢谢帮忙,收到了您写的code,但是有一点疑问,关于regex
private final static Pattern patt = Pattern
.compile("^([^,]+,){2}\d{2}/\d{2}/(\d{4})([^,]+,){3}([^,]+)"
);
Matcher m = patt.matcher(value.toString());
String year = m.group(2);
String crime = m.group(4);
这里面的正则表达是逐行分解CSV吗?里面的2和4,还有3是什么意思呢?谢谢
【在 l*n 的大作中提到】 : csv要么用apache的csv库,要么就直接regexp吧。
|
s*****m 发帖数: 8094 | 24 key不是按自己的喜好爱咋玩咋玩的么?这有啥好问的啊?
20
,
【在 W***o 的大作中提到】 : 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20 : 个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以 : 我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key, : 然后这个key所对应的value就是sum of the occurrences of theft in 2005. : 请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢
|
s*****m 发帖数: 8094 | 25 MR好是好玩的东西,物所为青春饭。那些个啦啦嘻嘻的ui/ux的鸡巴才是青春饭呢。无
聊+不稳定。
【在 b**********5 的大作中提到】 : 唉, 我再来抱怨一下, IT真的是青春饭。 我以前的学校, 读书的时候, : mapreduce这个词, 听都没听说过, 然后工作里, 也从来没用过。 resume上, 还 : 不如一个大学生。。。
|
s*****m 发帖数: 8094 | 26 严重怀疑lz是女汉子
【在 p*****2 的大作中提到】 : : key : theft_2005就可以了
|
s*****m 发帖数: 8094 | 27 java正是啰嗦
【在 W***o 的大作中提到】 : 再请教一下大家: : 下面是我的mapper code: : public class CrimeMapper extends Mapper: IntWritable> : { : protected static final int DATE_INDEX = 2; : protected static final int CRIME_TYPE_INDEX = 5; // column index : protected static final int YEAR_INDEX = 17; // column index : : private static final Log _log = LogFactory.getLog(CrimeMapper.class);
|
g*********e 发帖数: 14401 | 28
一分钟肯定不够
【在 l*******m 的大作中提到】 : laptop一分钟搞定 : : 20
|
t*********h 发帖数: 941 | 29 mapreduce里的value你可以放任意值
不过你这6GB 虽便用什么语言都能瞬时搞定 无需mapreduce
20
,
【在 W***o 的大作中提到】 : 我在分析一个犯罪数据,从2001年到2013年的,有大概6GB, CSV格式。里面大概有20 : 个columns,但是我只对其中几栏需要分析。比如我想分析每种犯罪在每年的数量,所以 : 我想能否用这样一个key: , 也就是犯罪类型和年份这个pair作为key, : 然后这个key所对应的value就是sum of the occurrences of theft in 2005. : 请教一下大侠这种是否可行?有没有更好的方法?谢谢,10个包子感谢
|
r*******n 发帖数: 3020 | 30 人家说了这是作业,是为了学用hadoop
【在 t*********h 的大作中提到】 : mapreduce里的value你可以放任意值 : 不过你这6GB 虽便用什么语言都能瞬时搞定 无需mapreduce : : 20 : ,
|