2017년 2월 8일 수요일

[Java]외워야 할 Math class 함수들


Math.PI 원주율
Math.sqrt(number) 제곱근
Math.toDegree(num) 라디안(컴퓨터) -> 디그리(사람) 단위로 변환
Math.toRadians(num)

Math.sin(num) 싸인
Math.cos(num) 코싸인
Math.tan(num) 탄젠트     num은 라디안 단위 값이여야 한다.

Math.log(num) 로그
Math.pow(num, 5) num의 5승

Random ran = new Random();
ran.nextInt(1000); ram.nextBoolean(); 난수 생성

StringTokenizer st = new StringTokenizer("문자열", "토큰");
public String nextToken()           //다음 토큰 반환
public boolean hasMoreTokens() //반환할 토크 확인

[Englsih]Day10

fossil fuel : 화석연료
diurnal : 주행성인, 하루동안인
novice : 초보자

One of the main causes of global warming is CO2 or carbon dioxide.
지구 온난화의 주된 원인 중 하나는 이산화 탄소이다. or는 equal의 의미로 해석한다.

I'll have a think about it.Sorry, I don't think I've got the time.It's not my cup of tea. 그것은 내가 좋아하지 않어.
Great! Sign me up please. 등록시켜주세요.
Country          People
-an
Australia         Austrailan
Malaysia         Malaysian
-ese
Japan             Japanese
Vietnam          Vietnamese
-i
Bangladesh      Bangladeshi
Kuwait            Kuwaiti
others
France            French
New Zealand   New Zealander
Philippines      Filipino

2017년 2월 7일 화요일

[Hadoop] WordCount Mapper 구현

MapReduce 프로그램은 3부분으로 구성된다.
  1. Driver
  2. Mapper
  3. Reducer
첫번째로 Mapper를 살펴보자.


package hadoop_test;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class WordCountMapper extends
Mapper<LongWritable, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);
private Text word = new Text();

public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException{
StringTokenizer itr = new StringTokenizer(value.toString());
while(itr.hasMoreTokens()){
word.set(itr.nextToken());
context.write(word, one);
}
}
}
알고리즘
1. 입력파라미터의 값인 문장을 공백 단위로 구분해 글자 수를 계산
2. 구분된 글자는 즉시 출력 파라미터에 추가. 글자 수를 1로 설정. ex) hi bob = 2


1]
public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable>

위 클래스는 Mapper 를 상속한다. 그대로 사용할 수 있지만 대부분 오버라이딩 한다.
Mapper.java는 Hadoop/src/mapred/org/apache/hadoop/mapreduce 에 정의되어 있다.

또한 제네릭 파라미터를 사용한다. 제네릭을 모른다?https://wikidocs.net/268
Mapper 코드는 입력 파일을 <Key, Value> 쌍으로 읽고 키 값 쌍을 내 보낸다.
순서대로 Mapper<입력 키 타입, 입력 값 타입, 출력 키 타입, 출력 값 타입>이다.
위 코를 해석하면 Mapper<Long, String, String Integer>이다.

어째서 LongWritable -> Long,  IntWritable-> Integer 이냐면, 맵리듀스는 네크워크 통신을 위한 최적화된 객체로 WritableComparable 인터페이스를 제공한다. 이를 통해 데이터 타입을 Wrapping을 하기 때문에 자료형의 클래스가 다르다. WritableComparable를 직접 구현하여 쓸 수 도 있다.



2] private final static IntWritable one = new IntWritable(1);
private Text word = new Text();

word는 키 , one은 값으로 사용한다. 예를 들어 "hi my hi "를 wordcount 하면 hi:2 my:1로 출력해야 한다. 글자 수는 1이여야 하므로 one을 final static으로 지정했다.  



3]  public void map(LongWritable key, Text value, Context context)

Mapper class스에도 정의되어 있는 method다. 각 인자는 <입력 키 타입, 입력 값 타입, Context 객체>이다. 이때 첫번째와 두번째 인자는 매퍼 클래스를 상속 받을 때와 동일한 타입이여야 한다. 즉 1]과 같이 데이터 타입을 Long, String으로 해야한다.

세번째 인자는 맵리듀스와 통신하면서 출력데이터, 모니터링에 필요한 상태값 등을 갱신하는 역할을 한다. Mapper.java 클래스에 Context클래스가 정의되어 있으며 생성자를 보면 InputFormat라는 추상클래스가 제공하는 RecordReader를 볼 수 있다. 이 때문에 입력 스플릿이 키와 값의 레코드로 맵 메서드의 파라미터로 전달 될 수 있는 것이다.


4]  StringTokenizer
StringTokenizer를 통해 공백 단위로 구분된 String값을 순회한다.
클래스에 대한 정보는 https://docs.oracle.com/javase/7/docs/api/




[Java]기본 Class들(Wrapper, BigInteger, BigDecimal)


1)Wrapper class 
기본 자료형의 인스터스화를 지원
-Boolean
-Character
-Byte
-Short
-Integer
-Long
-Float
-Double
모든 기본 자료형에 해당하는 Wrapper클래스가 정의되어 있다. 또한 String의 참조 값을 인자로 받는 생성자들이 있어서 Integer num = new Integer("1230"); 이 가능하다.

1-2)unboxing
또한 wrapper클래스의 인스턴스에 저장된 값은 변경이 불가능하다. 새로운 인스턴스의 생성 및 참조만이 가능할 뿐이다.
이를 위한 기능 인스턴스->기본자료형으로 바꾸는 작업을 unboxing이라 한다.
Ex)
Double d  = new Double(3.14);
d2 = new Double(d.doubleValue()+1.2); //인스턴스에 저장되 있는 값을 얻어 새로 참조.

그러나 현재는 auto boxing/unboxing 기능을 지원한다.
Double d  = new Double(3.14);
d2 = d+1.2;    //인스턴스 d를 unboxing하여 1.2와 더한 후, 다시 boxing 하여 d2에 저장.



2)와 3)둘다 java.math패키지를 import해야 한다.

2)BigInteger class
Long형보다 더 큰 수를 표현할 때 사용.
BigInteger b = new BigInteger("111111111111111111111111111");
BigInteger b2 = b.add("12312222222222222");
//문자형으로 받는다. long형보다 큰 수를 변수에 못 담으니 생성자도 존재할 수 없다.

3)BigDecimal class
오차없는 실수 표현을 위한 클래스
BigDecimal c = new BigDecimal("1.66");
c= c.add(new BigDecimal("0.33"));





[English]Day9


factory waste : 공장폐기물
dump waste : 쓰레기를 버리다
build up : 창조하다 높이다.
take place : 일어나다, 개최하다

Driving cars causes air pollution
Driving leads to air pollution
Driving cars  results in air pollution
->
Air pollution is caused by driving car
Air pollution is the result of driving car
Air pollution is due to driving car


You can't manage global warming at the scale of the individual.
너(너희)는 개인의 규모로 지구 온난화를 관리할 수 없다.

Managing the atmosphere has to take place at a global level.
대기의 관리는 전 세계적인 수준에서 이루어져야 한다.

[Python] for문 in Dictionary

>>> interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30}
interest_stocks라는 딕셔너리에 있는 키-값 쌍에 대해 매수 동작을 반복적으로 수행하려면 for 문을 사용하면 됩니다. 다만 딕셔너리의 한 원소에는 키와 값이 있기 때문에 for 문 다음에 있는 변수가 한 개가 아니라 두 개를 적어야 합니다. 그리고 딕셔너리 이름을 적은 다음 .items( )를 붙여야 합니다.
>>> for company, stock_num in interest_stocks.items():
        print("%s: Buy %s" % (company, stock_num))

SK Hynix: Buy 30
Naver: Buy 10
Samsung: Buy 5
>>>

2017년 2월 2일 목요일

[English]Day8


Vocabulary

nappingsleeping for a short period of time
(to) nod off : 꾸벅꾸벅 졸다to fall asleep
sleeping on the job 
sleeping when you should be working
insomniac : 불면증
a person who has difficulty falling sleep
40 winks : 잠깐 눈을 붙이다
(informal) nap for a short period of time
power-napa
short sleep that gives you energy
naptivist 
a made-up name for someone who actively campaigns for napping at work
attitude 
opinion or feeling about something
counter-cultural : 반문화, 반체제
opposite to what most people think or do
work ethic : 직업 윤리
belief about how we should work
wellbeing 
feeling of being happy and health
wide awake : 완전히 깨어 있는
quick sleep : 숙면
embrace : 포용하다
disrupt : 방해하다
prevail : 만연하다
snooze : 선잠을 자다
fad : 유행
harassment : 괴롭힘, 애먹음