🚨🚨🚨이건 반드시 준비하기. 무조건 시험에 나옴.!!
🌟🌟 이제 맵에서 조인해보기 mapSideJoin
relation_b를 map을 수행하기 전 미리 읽고 (setup)
mapper에서는 relation_a만 처리
붙여서 처리
셔플이랑 리듀스 없음
파일을 매퍼에서 읽는 법 :task tracker의 working directory를 복사해주는 매커니즘 -> distributed cache
main에서 relation_b를 distributed cache에 추가해줌
path는 hdfs의 path임 -> 모든 매퍼가 공유를 함
셋업 : 캐시된 파일의 목록을 가져올 수 있음 array로
한 개 밖에 없으므로 1번째가 우리가 원하는 것
bufferedReader로 읽으면 한줄한줄 읽을 수 있음
hash table의 key:A,B,F,K value: Adult, Baby, Food, Kitchin
public class DoubleString implements WritableComparable
{
String joinKey = new String();
String tableName = new String();
public DoubleString() {}
public DoubleString( String _joinKey, String _tableName )
{
joinKey = _joinKey;
tableName = _tableName;
}
public void readFields(DataInput in) throws IOException
{
joinKey = in.readUTF();
tableName = in.readUTF();
}
public void write(DataOutput out) throws IOException {
out.writeUTF(joinKey);
out.writeUTF(tableName);
}
public int compareTo(Object o1)
{
DoubleString o = (DoubleString) o1;
int ret = joinKey.compareTo( o.joinKey );
if (ret!=0) return ret;
return -1*tableName.compareTo( o.tableName);
}
public String toString() {
return joinKey + " " + tableName;
}
}
public static class CompositeKeyComparator extends WritableComparator {
protected CompositeKeyComparator() {
super(DoubleString.class, true);
}
public int compare(WritableComparable w1, WritableComparable w2) {
DoubleString k1 = (DoubleString)w1;
DoubleString k2 = (DoubleString)w2;
int result = k1.joinKey.compareTo(k2.joinKey);
if(0 == result) {
result = -1* k1.tableName.compareTo(k2.tableName);
}
return result;
}
}
public static class FirstPartitioner extends Partitioner<DoubleString, Text>
{
public int getPartition(DoubleString key, Text value, int numPartition)
{
return key.joinKey.hashCode()%numPartition;
}
}
public static class FirstGroupingComparator extends WritableComparator {
protected FirstGroupingComparator()
{
super(DoubleString.class, true);
}
public int compare(WritableComparable w1, WritableComparable w2) {
DoubleString k1 = (DoubleString)w1;
DoubleString k2 = (DoubleString)w2;
return k1.joinKey.compareTo(k2.joinKey); }
}
}