자바공부하기 144

 String 클래스의 주요 메소드

 

String의 메소드를 이용하지 않는 문자열 조작

 

자바공부하기 143

String 클래스 생성자

 

- String()

- Stinrg(char chars[])

- String(char chars[], int startindes, int numChars)

- String(byte asciiChars[])

- String(byte asciiChars[], int startindes, int numChars)

- chars[] : 문자배열

- startindes : 부분 문자열을 추출하기 위해 지정된 인덱스 값

- numChars : starindex에서 시작하여 추출할 문자 또는 바이트의 개수

- asciiChars[] : 바이트 배열로서 아스키(ascii)문자배열을 의미

 

String 클래스 예제

 

 

 

 

자바공부하기 142

String class 와 String Buffer.class

 

문자열 개요

- 자바에서는 문자열 객체로 취급

- java.lang.String 클래스와 java.lang.StringBuffer 클래스 제공

- String 클래스 : 한번 생성된 다음 변하지 않는 문자열에서 사용

: 한 객체에 담긴 문자열이 변경되지 않음을 보장

: + 같은 연산자로 합칠 때는 기존의 객체의 값이 변하는 게 아니라 새로운 객체 생성

 

문자열은 스트링 객체

StringBuffer 클래스 : 계속하여 변할 수 있는 문자열에 사용

- 문자열을 2개의 클래스로 제공하는 이유는 ??   --> 효율성

 

 

 

자바공부하기 141.

Java API Document

 

- http://docs.oracle.com/javase/8/docs/api/

- http://docs.oracle.com/javase/7/docs/api/

- http://docs.oracle.com/javase/6/docs/api/

 

다운로드

 

- http://www.oracle.com/technetwork/java/javase/documentation/jdk8-doc-downloads-213315.html

 

우측에 보이는 클래스를 선택하면 실제 API를 볼 수 있다.

 

 

 

Java API Document 보는방법

 

 

 

 

빅데이터 공부하기63

 

PIG

 

- MapReduce 프로그래밍을 보다 상위레벨에서 쉽게 해주기 위한 스크립트 기반의 Data Set Mainpulation Flow 프로그래밍 언어

 

- 야후에서 개발되기 시작했으며 (지금은 아파치 오픙소스)다음과 같은 두 가지 컴포넌트로 구성

: Pig Latin : 프로그래밍언어 자체

: 실행환경 : 로컬 모드와 분산모드가 있으며 전자는 하나의 JVM에서 동작하며(테스트 / 개발용)후자는 하둡 클러스터(Pseudo Distributed mode 포함)위에서 동작

 

Pig Latin

 

- 데이터셋 transformation을 통해 최종데이터를 생성해내는 스크립트언어. 최종적으로 Planner라는 모듈에 의해 여러개의 MapReduce프로그램으로 컴파일 됨

 

- Pig 자체에 부족한 기능이 있을 경우 UDF(User Defined Runcion)로 기능 확장이 가능하며 UDF는 자바뿐만 아니라 Python/Ruby등으로 작성가능

: PiggyBank: Pig 사용자들끼리 서로 만든 UDF를 공유하는 곳

(http://wiki.apach.org/pig/PiggyBank)

 

- 자바로 만든 Native MapReduce 프로그램에 비해 느리지만 일단 익히면 높은 생산성을 자랑

 

- 데이터셋의 스키마가 잘 정의 되지 않아도 동작(semi-structured data set에도 동작)

 

 

 

빅데이터 공부하기62

 

map.pl

 


 

reduce.pl

 

 

 

 

 

 

빅데이터공부하기 61

 

map.py

 

#!/usr/bin/env python

import sys

 

#--- get all lines from stdin ---

for line in sys.stdin:

#--- remove leading and trailing whitespace---

line = line.strip()

 

#--- split the line into words ---

words = line.split()

 

#--- output tuples [word, 1] in tab-delimited format---

for word in words

print'%s\t%s'%(word,"1")

 


 

reduce.py

 

#!/usr/bin/env python

import sys

word2count = {}

for line in sys.stdin:

line = line.strip()

word, count = line.split('\t',1)

try:

count = int(count)

except ValueError:

continue

try:

word2count[word] = word2count[word]+count

except:

word2count[word] = count

for word in word2count.keys():

print'%s\t%s'%(word,word2count[word])

 

 

 

 

 

 

빅데이터공부하기60

스트리밍

 

- 하둡은 자바이외의 언어로 MapReduce 프로그램을 작성가능하게 해주는 API제공

: 하둡패키지의 일부로 제공되는 contrib / streaming / hadoop-streming-1.0.3.jar을 사용

 

- Mapper task 혹은 reducer task는 mapper 혹은 reducer 스크립트를 자식프로세스로 실행하고 표준 입출력을 통해 통신을 수행

 

- 텍스트 프로세싱에 적합

: 텍스트 라인 하나가 결국 하나의 입력 레코드로 취급됨. 이것의 해석은 mapper에 달림

: Mapper의 출력이나 Reducer의 입출력은 모두 tab을 키와 밸류간의 delimiter로 사용. tab 이외의 문자도 사용가능(configurable)

: 이는 내부적으로 디폴트로 자바의 TextlnputFormat과 TextOutputFormat을 사용하기 때문

 

- Reducer의 경우 입력키에 대해 같은 값을 갖는 밸류리스트가 한라인으로 한번에 넘어오는 것이 아니라 Flatten되어 개별 쌍이 넘어옴

: reduce(k, [v1, v2, v3])이 아니라 "reduce(k1, v1), reduce(k1, v2), reduce(k1, v3)"의 형태가 됨

 

- 단순 셀유틸리티들로 Streaming을 쉽게 테스트가능

: cat 입력파일 |your_mapper_script|sort|your_reducer_script

 

- 카운터의 경우는 stderr로 특별히 포맷된 문자를 출력하면 가능.

: Python에서의 예 : sys.stdrr.write("reporter:counter.그룹이름, 카운터이름, 카운터증가수\n")

 

- 자바에서 쓸 수 있는 거의 모든 기능들이 Streaming에서도 가능

: Combiner, Partitioner, IdentityReducer 등등..

 

 

 

+ Recent posts