javascript 의 function 을 사용하다 보면,  파라미터에 대해서 arguments 배열에 접근하여 사용하는 경우가 있다.

이를 통해 유동적인 파라미터를 제어하거나, 기존에 제공되는 api 를 커스터마이징도 할 수 있게 된다.


예시 1) string fomat <= 클릭

예시 2) setTimeout 커스터마이징 <= 클릭


function argLength(one, two){

    console.log("argLength.length : " + argLength.length);

    console.log("arguments.length : " + arguments.length);

}

argLength(1,2,3,4);


위 예제의 결과는

argLength.length : 2

arguments.length : 4

가 나오게 된다.

argLength 라는 function 은 선언되면서 가지게되는 몇가지 멤버변수가 있는데, 그중에 length 부분에는 선언시 정의된 파라미터의 개수가 바인딩된다. 

function 호출시에 파라미터는 function 에서 선언된 파라미터에 arguments 값이 순서대로 맵핑되고, 파라미터가 더 적은 경우에는 undefined 를 가지게 되며, 선언파라미터 많은 경우에는 arguments 배열을 통해 접근이 가능하게 된다.


* 호출

argLength(1);

* 결과

argLength.length : 2

arguments.length : 1

이와 같이 호출시에는 argLength 의 two 값은 undefined 가 되게 된다.



* 실행 테스트 function

var argLength = function(one,two){

     //... 중략

}

으로 선언된 function 이 있다.

아래에서 파라미터를 변경하여 실행하면(ex> argLength("홍길동","무인도","정류소") ), 

one, two 의 값과 argLength.length , arguments.length 를 확인할 수 있다.


 실행테스트

 결과

  

 



이상~

오라클 등에서는 to_number 와 같은 함수를 지원하는데 

그에 대해서 하이브는 cast 라는 함수를 지원한다.

사용법은 다음과 같다.



syntax> cast(컬럼 as 타입)

타입은 int, double, string 과 같은 형태를 말한다.


* 예시

 select stddev_pop(cast(population as double)) stddev ,

          variance(cast(population as double)) variance

 from lar_ca where population is not null;


기타로 stddev_pop 는 표준편차를

variance 은 분산을 구하는 함수이다.

'IT > 빅데이터(bigData)' 카테고리의 다른 글

하이브(hive) udf  (0) 2014.11.25
Hive 의 Serde 2  (0) 2014.11.25
Hive 의 Serde 1  (0) 2014.11.25
MapReduce 데이터 흐름 분석  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22

C# 에서 UI 를 만들 때 컨트롤들이 원하는 대로 dock 이 안될 때가 많다.

다른 컨트롤에 add 되거나...  dock 순서가 꼬이거나..


그럴때는 속편하게 UI [디자인] 대신 Designer.cs 파일을 직접 열어서 컨트롤간 상의 관계와

dock 순서를 제어하는게 빠르다..


1. 컨트롤간의 add 를 먼저 확인한다. 다른 컨트롤에 붙는 경우도 많다..

2. form 에 컨트롤이 add 되는 순서를 확인한다.

   UI[디자인] 에서 add 되는 순서로 자동으로 docking 포지션을 가지기 때문에 확인 필수


예> 

   this.Controls.Add(this.mainPanel);

   this.Controls.Add(this.topPanel);


'IT > C#' 카테고리의 다른 글

폼(Form) 이동 막기  (0) 2014.12.02
BrowserControl 과 javascript 통신  (1) 2014.12.02

폼(Form) 이동 막기

C# 에서는 WndProc 를 override 하여 메세지에 대한 제어를 할 수 있다.

그중 가장 간단한 폼이동을 막는 기능을 살펴보자


        // 1. 컨트롤할 메세지에 대한 정의

        private const int WM_SYSCOMMAND = 0x0112;

        private const int SC_MOVE = 0xF010;


        protected override void WndProc(ref Message message)

        {        

             switch (message.Msg)

            {

                 // 2. 컨트롤 할 메세지는 이부분에 추가 한다.

                  case WM_SYSCOMMAND:

                     int command = message.WParam.ToInt32() & 0xfff0;

                     // 3. 이동에 대한 경우 리턴 시킴

                     if (command == SC_MOVE)

                          return;

                     break;

            }

            // 다른 메세지는 그대로 전달함

            base.WndProc(ref message);

        }


순서

1. 제어할 메세지 정의

2. 메세지에 대한 컨트롤

3. 해당 메세지 제어한 것으로 완료할 경우 return 시킴. 간단함 커스터마이징만하고 기본동작이 실행되기를 원한다면 return 시키면안됨

4. 자바로 보면 super , C# 으로는 base 에게 메세지 전달


이상 ~~~ 쉽죠잉~

'IT > C#' 카테고리의 다른 글

Control Docking  (0) 2014.12.02
BrowserControl 과 javascript 통신  (1) 2014.12.02

C# 에서 제공하는 WebBrowser 컨트롤과 컨트롤안에 로드된 javascript 간의 통신방법이다.


1. javascript 에서 C# 호출방법

    아래와 같은 선언이 필요하며, 호출될 메소드는 당연히 public 이어야 한다. 


    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]

    [ComVisible(true)]

    public partial class AppContainer : Form{

         // .. 중략


        /**

         * 호출될 public 메소드

         * 호출받은 값을 메세지 박스로 보여줌

         */

        public void RecieveJs(Object msg)

        {

            MessageBox.Show(@"받은 값" + msg);

        }

        /**

         *  아래와 같이 호출시 리턴도 가능하다.

         *  디렉토리목록을 보여주고 선택한 디렉토리의 파일목록을 리턴함

         */

        public string ShowDirectory()

        {

            var files = String.Empty;

            var folderBrowser = new FolderBrowserDialog();

            if (folderBrowser.ShowDialog() == DialogResult.OK)

            {

                files = String.Join(",", Directory.GetFiles(folderBrowser.SelectedPath));

            }

            return files;

        }

    }


2. C# 에서 javascript 호출

C# form의 textbox 두개의 값을 버튼 클릭시 javascript 로 보내는 예제이다.

invoikeScript 를 통해 호출할 function 명 및 parameter 를 전송한다.

    // wb 는 WebBrowser 컨트롤 변수명

     private void SendBtn_Click(object sender, EventArgs e)

    {

         if (wb.Document != null)

         {

               Object[] objArray = {textBox1.Text, textBox2.Text};

              // javascript 의 recieveMessage function 을 호출함

               wb.Document.InvokeScript("recieveMessage", objArray);  

          }

     }


이상

'IT > C#' 카테고리의 다른 글

Control Docking  (0) 2014.12.02
폼(Form) 이동 막기  (0) 2014.12.02
HTML , CSS 를 쉽게 만들자~~!

subline Text 라는 툴이 있다.
파이썬으로 개발된 편집기로 매우 막강한 기능을 제공한다.

이 편집기의 기능중 하나인 Zen-coding 이라는게 있다.

이클립스에서는 플러그인으로 이 기능을 사용할 수 있다.


Zen-coding 은 html 또는 css 를 간단한 문법으로 매우 빠르게 생성할 수 있다.


* 설치

이클립스 의 이클립스마켓을 선택한다.(help > Eclipse Marketplace)

Emmet 을 검색한다.




위 그림에 표시된 플러그인을 설치한다.(그림의 경우는 이미 설치된 상태임)


Window > Preferences 를 실행한다.



위그림과 같이 emmet 을 선택후 extensions 부분에 jsp 를 추가한다.(이 부분을 안할 경우 jsp 에서는 동작하지 않는다)


여기까지 했다면 설정은 완료되었다.


이제 간단한 사용법을 살펴보자.

사용법은 css 또는 jquery 의 셀렉터를 생각하면된다.


table>tr>td*3  이와 같이 타이핑후 탭(tab)키를 누르면 아래와 같은 경과가 나온다.

       <table>

<tr>

<td></td>

<td></td>

<td></td>

</tr>

</table>

table 태그 아래 tr 태그 아래 td 태그를 생성하고 td는 3개를 생성하라는 의미이다. 너무나 간단하다.


 태그

 내용

 >

 하위에 태그를 생성한다.

 +

 동등한 위치에 태그를 생성한다.

 * 횟수

 생성할 갯수를 정한다.


이것 이외에 클래스 또는 id 등을 다는 방법은 기본적인 셀렉터와 동일하다.


input:button#btn.btnStyle 이와 같이 입력하면 아래와 같은 결과값이 도출된다.

<input type="button" value="" id="btn" class="btnStyle" />

# 은 id 를  .은 클래스를 생성한다.

또한 input:button 은 input:b 로 줄여서 사용이 가능하다.



그렇다면 역으로 아래와 같은 결과를 뽑기 위해서는 어떻게 작성해야하는가~?


      <table id="list" class="viewList">

<thread>

<tr>

<th></th>

<th></th>

<th></th>

</tr>

</thread>

<tr class="row">

<td class="cell"></td>

<td class="cell"></td>

<td class="cell"></td>

</tr>

<tr class="row">

<td class="cell"></td>

<td class="cell"></td>

<td class="cell"></td>

</tr>

<tr class="row">

<td class="cell"></td>

<td class="cell"></td>

<td class="cell"></td>

</tr>

</table>

  

정답 =>   table#list.viewList>(thread>tr>th*3)+(tr.row*3>td.cell*3)

단 한줄만으로 저러한 table 태그를 생성할 수 있다.

이것 이외에도 매우 많은 기능들이 제공되고 있으며, 아래 사이트에서 확인이 가능하다.



html Zen-coding 문법 확인

css Zen-coding문법 확인


이상~~


udf 란?

hive에서 사용하는 function 을 사용자가 직접구현하는 사용자 정의 펑션(user-defined-function의 약자)이다.

즉 user 하이브에서 사용할 function 을 구현하는 것이다. 일반 데이터베이스의 function 을(오라클 to_date, sum 등)을 직접 구현한다고 생각하면 된다.

 

syntax>

select <user-defined-function>(<colum_number>) from <table> ;


구현소스 

@Description(

  name="SimpleUDFExample",

  value="returns 'even x' or return 'odd x', where x is whatever you give it (Int)",

  extended="SELECT simpleudfexample('world') from foo limit 1;"

  )

class SimpleUDFExample extends UDF {

  

    public Text evaluate(IntWritable input) {

        if(input == null) return null;

        return new Text( (input.get()%2 == 0 ?"even ":"odd " )+ input.toString());

    }

}

  

보여주고자 하는 타입에 따라 return type을 설정하고, 매개변수는 function 의 입력 파라미터의 수 및 타입이 맞아야 한다.

매개변수는 Writable 을 상속한 클래스여야 한다.


 public Text evaluate(Text param1, IntWritable param2.... ) {

위와 같이 증가 시킬 수 있다.


evaluate 는 리턴은 void 는 안된다.( 리턴값이 function 의 실행 결과 같이 된다.)

 


hive 에서의 사용 예제


예시 데이타>

hive> select noticeseq from t_test;

1

2

3

4

 

 등록후 실행>

hive> ADD JAR ./hivetemplate.jar; 

* 해당 udf가 구현된 jar를 hive 에 등록한다.

hive> CREATE TEMPORARY FUNCTION examudf as 'SimpleUDFExample';

* 해당 udf 구현클래스를 function 으로 생성한다.

hive> select examudf(noticeseq ) from t_test;

odd 1

even 2

odd 3

even 4


'IT > 빅데이터(bigData)' 카테고리의 다른 글

hive 에서 형변환 함수  (0) 2014.12.02
Hive 의 Serde 2  (0) 2014.11.25
Hive 의 Serde 1  (0) 2014.11.25
MapReduce 데이터 흐름 분석  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22



예제파일 : TemplateSerde.java


Serde 구현

 

기존방법

권고방법

비고

차이점

인터페이스를 상속하여 구현(implements)

곧 Deprecated 예정 

추상화 클래스를 상속하여 구현(extends)

인터페이스에서 추상화 클래스로 변경됨(클래스 위치: org.apache.hadoop.

hive.serde2)

직렬화/역직렬화

모두 구현시 상속

SerDe 인터페이스 상속

곧 Deprecated 예정 

 

AbstractSerDe 추상화클래스 상속하여 구현(extends)

동일 구현 메소드

Initialize

getSerializedClass

serialize

deserialize

getObjectInspector

getSerDeStats

직렬화만 구현

Serializer 인터페이스 상속

AbstractSerializer 추상화클래스 상속하여 구현(extends)

구현 메소드

Initialize

getSerializedClass

serialize

getSerDeStats

역직렬화만 구현

Deserializer 인터페이스 상속

 

AbstractDeserializer 추상화클래스 상속하여 구현(extends)

 

구현 메소드

Initialize

deserialize

getObjectInspector

getSerDeStats

 

1). 공통구현 메소드

 

- Initialize

 

해당 테이블의 컬럼 개수컬럼의 Type 정보를 얻을 수 있으며기본 구분자는 “,” 를 사용한다. 

 

 

- getSerDeStats

 

row 수 사이즈 등을 저장한 정보를 제공(불필요시에 Null 을 리턴)

 

 

 

2) 직렬화 구현 메소드

 

- getSerializedClass

 

HDFS 에 저장시 사용될 Writable을 상속한 클래스를 정의하여 리턴한다.

 

- serialize

 

테이블이 조회되어 한 row 에 대한 정보가 들어오며 해당 정보를 조합하여 HDFS 에 저장될 Line 을 생성한다.

 

 

 

3) 역직렬화 구현 메소드

 

- getObjectInspector

 

Table 에 저장될 각 컬럼의 타입을 저장하여 리턴한다.

 

- deserialize

 

HDFS 에서 조회된 한 Line 별 정보가 입력되며 해당 값을 필요에 따라 Parsing 하여 테이블에 저장될 구조의 array 를 만들어서 리턴한다.

 

 

 

2실행

 

1) 직렬화

 

※ 직렬화 jar 의 경우 HDFS 에서 사용하기 때문에 경로에 대한 path 또는 HDFS 에서 사용하는 jar 에 포함 시켜야함

 

1-1) 실행

 

INSERT OVERWRITE LOCAL DIRECTORY '저장될 LOCAL 경로’ ROW FORMAT SERDE ‘등록한 직렬화클래스’ SELECT * FROM 테이블명;

 

※ INSERT OVERWRITE DIRECTORY 처럼 LOCAL 을 생략시 HDFS 에 저장됨단 구현한 직렬화 클래스가사용안됨

 

1-2) 확인

 

LOCAL syntax 사용 여부에 따라 로컬 경로 또는 hdfs 의 경로로 해당 파일 조회(000000_0 으로 해당 폴더에 파일이 생성됨)


 

2) 역직렬화

 

2-1) 해당 Serde 을 하이브에 등록한다.

 

Add jar ./파일명.jar

 

2-2) Table 을 생성한다.

 

Create table IF NOT EXISTS 테이블명 {

 

Id STRING,

 

name STRING

 

..(이와 같은 형태로 테이블의 구조를 생성)

 

}

 

ROW FORMAT SERDE ‘등록할 역직렬화가 구현된 클래스


3) HDFS 의 데이터 로드

 

Syntax> LOAD data <LOCAL> inpath <file path> into table [tablename]

 

LOAD DATA INPATH 'HDFS 상의 데이터 경로' OVERWRITE INTO TABLE 생성한 테이블명;


4) 확인

SELECT * from 생성한 테이블명;




'IT > 빅데이터(bigData)' 카테고리의 다른 글

hive 에서 형변환 함수  (0) 2014.12.02
하이브(hive) udf  (0) 2014.11.25
Hive 의 Serde 1  (0) 2014.11.25
MapReduce 데이터 흐름 분석  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22

Hive  Serde


Serde 란 ?

직렬화와 역직렬화를 뜻하며, HDFS  HIVE 간의 데이터 교환을 뜻한다.

역직렬화(Deserializer)

HDFS files  ▶ InputFileFormat  <key, value>  Deserializer  Row object

HDFS 의 파일을 Hive 테이블에 저장

 

직렬화(Serializer)

Row object  Serializer  <key, value>  OutputFileFormat  HDFS files

Hive 테이블의 정보를 HDFS 의 파일로 저장


'IT > 빅데이터(bigData)' 카테고리의 다른 글

하이브(hive) udf  (0) 2014.11.25
Hive 의 Serde 2  (0) 2014.11.25
MapReduce 데이터 흐름 분석  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22
여러 기능의 맵리듀스를 하나의 jar 로 묶을때  (0) 2014.11.22

 

 

 

 

test.txt 에 아래와 같은 데이터가 있다면

1,2,1,2

B,A,B,A

3,3,2,3

A,B,B,B

 

$ hadoop fs -put test.txt /user/test.txt

를 통해 hdpf 에 저장되어 있다 가정하자

이때 아래와 같이 2개의 datanode 로 데이터가 분산되어 있다면

 

datanode 1의 데이터는

1,2,1,2

B,A,B,A

 

datanode 2의 데이터는

3,3,2,3

A,B,B,B

 

이렇게 분산되어 있다라고 가정하자.

 

 

 

이 데이터의 최빈도(가장 많은 단어 mode)를 획득하려고 한다. 그래서 아래와 같이 구현했다고 가정하자

mapper 에서는 각 데이터를 분할하고

reduce 에서는 각 데이터의 최종합을 구하도록  mapreduce 

 

 

mapper 의 input 은 해당 데이터의 line 별로 입력된다.

보통 입력된 데이터를 필요한 포맷으로 split 하여 사용한다. 여기서는 , 로 split 한다.

 

즉 datanode 1 의 mapper 에서는  

1)   1,2,1,2

2)   B,A,B,A

이러한 데이터로 두번 mapper 의 map 메소드가 호출되고

 

즉 datanode 2 역시

1)   3,3,2,3

2)   A,B,B,B

이러한 데이터로 두번 mapper 의 map 메소드가 호출된다.

 

 이동작을 표로 구분하면 다음과 같다.

 

1. combiner 가 없는 경우

 

동작

데이터노드1

데이터노드 2

HDFS 데이터

1,2,1,2

B,A,B,A

3,3,2,3

A,B,B,B

Mapper 의 map 메소드 입력

1,2,1,2

3,3,2,3

B,A,B,A

A,B,B,B

Mapper 의 map 메소드 출력

(1, NullWritable)

(3, NullWritable)

(2, NullWritable)

(3, NullWritable)

(1, NullWritable)

(2, NullWritable)

(2, NullWritable)

(3, NullWritable)

(B, NullWritable)

(A, NullWritable)

(A, NullWritable)

(B, NullWritable)

(B, NullWritable)

(B, NullWritable)

(A, NullWritable)

(B, NullWritable)

Shuffle(key 로 sorting)

Reducer 

reduce 메소드의 입력

NullWritable => N 으로 기술

(1, [N,N])

(2, [N,N,N])

(3, [N,N,N])

(A, [N,N,N])

(B, [N,N,N,N,N])

Reducer 

reduce 메소드의 출력(최빈도) 

(B, 5)

 

 

 

 2. combiner 를 구현한 경우

combiner 에서는 value 를 각 단어의 개수를 저장함

 

동작

데이터노드1

데이터노드 2

HDFS 데이터

1,2,1,2

B,A,B,A

3,3,2,3

A,B,B,B

Mapper 의 map 메소드 입력

1,2,1,2

3,3,2,3

B,A,B,A

A,B,B,B

Mapper 의 map 메소드 출력

(1, NullWritable)

(3, NullWritable)

(2, NullWritable)

(3, NullWritable)

(1, NullWritable)

(2, NullWritable)

(2, NullWritable)

(3, NullWritable)

(B, NullWritable)

(A, NullWritable)

(A, NullWritable)

(B, NullWritable)

(B, NullWritable)

(B, NullWritable)

(A, NullWritable)

(B, NullWritable)

Combiner 

reduce 메소드의 입력

NullWritable => N 으로 기술

 

(1, [N,N])

(2, [N])

(2, [N,N])

(3, [N,N,N])

(A, [N,N])

(A, [N])

(B, [N,N])

(B, [N,N,N])

Combiner 

reduce 메소드의 출력

 

(1, 2)

(2, 1)

(2, 2)

(3, 3)

(A, 2)

(A, 1)

(B, 2)

(B, 3)

Shuffle(key 로 sorting)

Reducer 

reduce 메소드의 입력

(1, [2])

(2, [2, 1])

(3, [3])

(4, [1])

(A, [2, 1])

(B, [2, 3])

Reducer 

reduce 메소드의 출력 (최빈도) 

(B, 5)

 

'IT > 빅데이터(bigData)' 카테고리의 다른 글

Hive 의 Serde 2  (0) 2014.11.25
Hive 의 Serde 1  (0) 2014.11.25
Mapper 클래스 구성 및 사용  (0) 2014.11.22
여러 기능의 맵리듀스를 하나의 jar 로 묶을때  (0) 2014.11.22
Hadoop 의 Counter 이야기  (0) 2014.11.22

+ Recent posts