input의 사용

>>> a = input()

Life is too short, you need python

>>> a

'Life is too short, you need python'


input은 입력되는 모든 것을 문자열로 취급한다.

print의 사용

>>> number = input("숫자를 입력하세요: ")

숫자를 입력하세요: 3

>>> print(number)

3

 

 

>>> print("life" "is" "too short")

lifeistoo short

 

>>> print("life", "is", "too short")

life is too short

 

 

한 줄에 결과값 출력하기


한 줄에 결과값을 계속 이어서 출력하려면 입력 인수 end를 이용해 끝 문자를 지정해야 한다.

 

>>> for i in range(10):

...     print(i, end=' ')

...

0 1 2 3 4 5 6 7 8 9



참조 : 점프 투 파이썬(https://wikidocs.net/25)

'Programming > Python' 카테고리의 다른 글

Lambda함수  (0) 2017.05.10
파일 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08

함수의 구조

def 함수명(입력 인수):

    수행할 문장1

    수행할 문장2

    ...

 

 

입력값이 여러 개일 때

def 함수이름(*args):

    수행할 문장

    ...

일반적으로 볼 수 있는 함수 형태에서 괄호 안의 입력 인수 부분이 *args로 바뀌었다.

 

)

>>> def sum_many(*args):

... sum = 0

... for i in args:

...     sum = sum + i

... return sum

...

 

return값이 2개이상일때

>>> def sum_and_mul(a,b):

... return a+b, a*b

튜플값으로 리턴된다. (a+b, a*b)

 

인수에 초깃값을 미리 설정해 주는 경우

def say_myself(name, old, man=True):

print("나의 이름은 %s 입니다." % name)

print("나이는 %d살입니다." % old)

if man:

    print("남자입니다.")

else:

    print("여자입니다.")

 

함수 입력 인수에 초깃값을 설정할 때 주의할 사항

def say_myself(name, man=True, old):

print("나의 이름은 %s 입니다." % name)

print("나이는 %d살입니다." % old)

if man:

    print("남자입니다.")

else:

    print("여자입니다.")

 

이전 함수와 바뀐 부분은 초깃값을 설정한 인수의 위치이다. 이것은 함수를 실행할 때 오류가 발생한다.


참조 : 점프 투 파이썬(https://wikidocs.net/24)

'Programming > Python' 카테고리의 다른 글

파일 입출력  (0) 2017.05.08
사용자 입출력  (0) 2017.05.08
for 문  (0) 2017.05.08
while 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07

이전 까지의 내용은 빅데이터 플랫폼 아키텍처에 대한 개요와 첫 걸음인 데이터 수집을 위한 다양한 오픈소스를 살펴보았습니다. 여러가지 오픈 소스 중에도 Apache Flume을 통한 정형,비정형 로그 수집, Apache Sqoop을 통한 DB 데이터 수집, 그리고, 데이터 저장을 위한 HDFS에 대해서도 간략히 알아봤습니다.
HDFS에 저장되어 있는 데이터를 효과적으로 처리하기 위한 오픈 소스 또한 여러가지가 있습니다. Map Reduce, Pig, Hive 그리고, 최근에 Hot 오픈 소스인 Spark 등이 있습니다.


Apache Pig와 Hive 비교

HDFS상의 데이터를 처리하기 위해 개발자가 개발언어(Java 등)로 직접 Mapreduce 코드를 작성하여 처리를 해왔다.
Pig가 나오면서 Pig Latin이라는 스크립트로 조금 더 쉽게 작성할 수 있었다. Mapreduce 코드보다 대략 1/20으로 코드량이 줄어들고, 개발속도 또한 1/16로 줄어든다는 통계도 있다. 하지만, Pig Latin 또한 스크립트이므로 개발자가 아니면 쉽게 접근하기 힘들 것이다.
이에 SQL 형태로 할 수 있게 된 것이 Hive이다. Database를 조작하는 SQL을 이해한다면, 쉽게 접근할 수 있게 되었다. 가장많이 선호하는 것이 Apache Hive라고 할 수 있겠다.

Pig와 Hive에 대한 요약과 차이를 간략히 정리된 내용을 소개하면 아래와 같다.


pigvshive


pigvshive2

[출처 : http://www.edureka.co/blog/pig-vs-hive/ ]


about Apache Hive

여기서는 널리, 가장많이 사용되는 Hive에 대해서만 알아보고자 한다.
The Apache Hive ™ data warehouse software facilitates querying and managing large datasets residing in distributed storage.
 Hive는 앞서 간단히 설명했듯이 HDFS 상의 오픈소스 DW 솔루션이다. DW(Data Warehouse)는 리포팅 및 분석을 위한 구조체라 보면 되겠다.
즉, Hadoop 클러스터에 저장된 데이터를 MapReduce 를 직접 구현하여 데이터를 분석 하기엔 개발 스킬과 경험이 필요하며, 이를 이해하고 구현 하는 시간과 노력을 줄이고자, 보다 편리하게 데이터 분석이 가능한 HIVE (SQL방식이며 facebook에서 개발) M/R 처리 기능을 도입되었다.쉽게 데이터를 ETL처리 할 수 있으며, HiveQL이라 부르는 ANSI-SQL을 지원하는 SQLike한 스크립트를 지원한다.

Hive Architecture는 아래와 같다.

hive_architecture

주요 구성요소를 보면,

  • JDBC/ODBC : SQL Query문을 MR로 변환해주는 Query Compiler 및 실행엔진
  • UDF/UDAF : 직접 필요한 함수를 만들어 사용할 수 있음
  • Metastore
    • HDFS상의 데이터를 DB Table 형식으로 관리하기 위한 메타 정보, table, patitions, column 정보를 저장.
    • 임베디드 되어 있는 Apache Derby를 사용하거나, Local 또는 Remote의 RDBMS(MySQL, Postgres 등)를 Metastore로 사용할 수 있음.

아래 보는 바와 같이 HiveQL은 SQL을 알면 이용에는 무리가 없을 것이다.

1
2
3
4
5
6
SELECT page_views.*
FROM page_views JOIN dim_users
 ON (
  page_views.user_id=dim_users.id
  AND page_views.date >= '2015-07-24'
)

Hive 이용

  • Hive 0.13.0 버전까지만 해도 Transactions이 지원되지 않았다. 즉, UPDATE, DELTE가 지원되지 않았음.
  • 0.14.0 버전부터는 제한적이긴 하지만 Transactions이 지원된다. 하지만, BEGIN, COMMIT, ROLLBACK 는 지원되지 않는다. 즉, 항상 auto-commit 이다.
  • Transcations 을 이용하기 위해서는 몇 가지 Configuration 조정이 필요하다. 해당 Configuration은 여기를 참조. – Hive Transactions


 앞서 언급했듯이, HiveQL로 분석, 데이터 작업은 용이하나, 내부적으로는 어차피 Mapreduce 로 변환되어 진행되기 때문에 빠른 처리는 불가능하다. 그래서 최근에 많이 언급되고 있는 Facebook Presto, Tajo, Apache Spark 등 메모리 기반을 통해 성능, 속도향상을 하고 있다. 그 중에서도 최근에 가장 Hot한 것은 Apache Spark라고 할 수 있다.


Apache Spark

Hive와 호환이 되기 때문에 많이들 사용하고 있다. 아래 Spark 개요에서와 같이 Spark SQL -예전에 Shark라 불렀던-을 활용하면 쉽게 사용이 가능하다.
또한, 추천에 많이 사용하는 Machine Learning 오픈소스인 Apache Mahout를 대신해 최근에 Spark MLlib를 활용하는 추세이다.
Query에 따라 다르겠지만, Hive 비해 40배 정도 빠른 속도를 자랑한다.
또한, Spark Streaming을 통해 실시간 처리도 가능하다.


apache_spark

Hive와 Spark의 개념은 아래를 비교해보면 좀 더 이해가 쉬울 것이다.


hive_architecture

Hive Architecture

spark_architecture

Spark Architecture

[출처 : http://www.slideshare.net/Hadoop_Summit/spark-and-shark]



Reference



출처 : http://hochul.net/blog/about-hive-pig-spark_data/

하둡과 아파치 스파크, 무엇이 어떻게 다른가? 5가지 궁금증

Katherine Noyes | IDG News Service


종종 하둡과 아파치 스파크가 빅데이터 영역에서 경쟁관계 있는 것처럼 보이기도 했지만 최근 들어 이 둘이 서로 조화를 이룬다는 생각이 점점 더 확산되고 있다.

빅데이터를 다루는 대화나 기사를 접하다 보면 하둡과 아파치 스파크라는 이름을 어렵잖게 들을 수 있다. 그렇다면 이들의 정체는 무엇이고, 둘 사이에는 어떤 차이점이 있을까?

1. 하둡과 아파치 스파크의 역할은 다르다.

 하둡과 아파치 스파크는 모두 빅데이터 프레임워크라는 점에서는 공통 분모를 가지지만, 그 용도에는 상당한 차이가 있다. 먼저 하둡은 기본적으로 분산형 데이터 인프라스트럭처로써, 대량의 데이터 컬랙션을 상용 서버 클러스터 내 복수의 노드들에 분산시키는 역할을 한다. 맞춤 제작한 하드웨어를 구매하고 유지하는데 들어가는 사용자의 비용 부담을 줄여준다는 점이 이 방식의 장점이다. 또 하둡은 데이터를 인덱싱하고 추적해 빅데이터 프로세싱 및 애널리틱스 활동의 효율성을 큰 폭으로 개선한다는 점에서도 많은 시장의 지지를 얻고 있다. 이와 달리 스파크는 이러한 분산형 데이터 컬랙션 상부에서 동작하는 데이터 프로세싱 툴이며, 분산형 스토리지로서의 역할은 수행하지 않는다.
 
2. 하둡과 아파치 스파크는 상호 독립적이다.

 하둡은 하둡 분산형 파일 시스템(HDFS, Hadoop Distributed File System)이라는 이름의 스토리지 컴포넌트와 더불어 프로세싱 컴포넌트인 맵리듀스도 제공한다. 즉 프로세싱 작업을 위해 스파크를 필수적으로 필요로 하지 않는 것이다. 반대로 스파크도 하둡 없이 이용할 수 있다. 스파크에 자체 파일 관리 시스템이 포함되진 않고 그것을 필요로 하는 것은 사실이지만, 굳이 HDFS가 아니더라도 여타 클라우드 기반 데이터 플랫폼과도 융합될 수 있기 때문이다. 그러나 스파크 자체가 본래 하둡용으로 설계된 솔루션인만큼 둘이 함께할 때 가장 좋은 궁합을 보여주긴 한다.

3. 스파크가 더 빠르다.

 일반적인 상황에서 스파크의 속도는 맵리듀스와 비교해 월등히 뛰어나다. 데이터 프로세싱 방법에 따른 차이다. 단계별 데이터 처리 방식을 취하는 맵리듀스와 달리 스파크는 전체 데이터셋을 한번에 다룬다. 부즈 알렌 헤밀튼(Booz Allen Hamilton)의 수석 데이터 과학자 커크 본은 “맵리듀스의 워크플로를 설명하자면, 먼저 클러스터에서 데이터를 읽어낸 뒤, 동작을 실행하고, 결과를 클러스터에 기록한 다음, 또 다시 업데이트된 데이터를 클러스터로부터 읽어내고 다음 동작을 실행한 후 결과를 클러스터에 입력하는 식이다. 반면 스파크는 모든 데이터 운영을 메모리 내에서 실시간에 가깝게 처리할 수 있다. 풀어 설명하자면 클러스터로부터 데이터를 읽어 들이고 필요한 모든 애널리틱스 운영을 수행하는, 그리고 결과물을 클러스터에 입력하는 전 과정이 동시적으로 진행되는 것이다”라고 이야기했다. 배치 프로세싱의 경우에는 스파크가 맵리듀스에 비해 10배 빠른 수행이 가능하며, 인 메모리 애널리틱스의 경우에는 속도 차이가 100배에 이른다고 본은 설명했다. 

4. 스파크의 속도가 꼭 필요한 것은 아니다.

 데이터 운영 및 리포팅 요구 대부분이 정적인 것이고 배치 모드 프로세싱을 기다릴 수 있다면, 맵리듀스의 프로세싱 방식이 문제가 되지는 않을 것이다. 스파크가 정말로 필요한 상황은 공장 내 센서 등이 발생시키는 스트리밍 데이터를 처리하거나, 머신러닝 알고리즘과 같이 애플리케이션이 복합적인 운영을 필요로 하는 경우다. 구체적으로 실시간 마케팅 캠페인, 온라인 상품 추천, 사이버 보안 분석, 기계 로그 모니터링 등의 애플리케이션 작업에 스파크가 많은 도움이 되는 것이다. 

5. 고장 회복 방식은 다르지만, 둘 다 준수하다.

 매 운영 이후 결과를 디스크에 기록하는 하둡의 방식은 시스템 사고나 고장 상황에서 매우 유용할 수 있다. 그리고 스파크의 경우에는 탄력적 분산형 데이터셋(RDD, Resilient Distributed Dataset)이라는 형태로 데이터 오브젝트들을 데이터 클러스터 전반에 분산시킴으로써 탄력성을 보장한다. 본은 “이 데이터 오브젝트들은 메모리 내에, 혹은 디스크에 저장할 수 있으며, 또 RDD는 사고나 고장이 나더라도 완벽하게 복구할 수 있게 하는 기술이다”라고 설명했다. ciokr@idg.co.kr



원문보기: 
http://www.ciokorea.com/news/27798#csidx3d1b346f5c23f7f9d114af42a2ac38e 

표현식

표현식

 설명 

 ^

 문자열의 시작

 문자열의 종료

.

 임의의 한 문자 (문자의 종류 가리지 않음)

 , \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

 앞 문자가 하나 이상

 앞 문자가 없거나 하나있음

 [ ]

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 { }

 횟수 또는 범위를 나타낸다.

 ( )

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

 

1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[-]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})

 

특수 문자 자체를 검색하기 및 사용하기



\^

^

\.

.

\[

[

\$

$

\(

(

\)

)

\|

|

\*

*

\+

+

\?

?

\{

{

\\

\

\n

줄넘김 문자

\r

리턴 문자

\w

알파벳과 _ (언더바)

\W

알파벳과 _ 가 아닌 것

\s

빈 공간(space)

\S

빈 공간이 아닌 것

\d

숫자

\D

숫자가 아닌 것

\b

단어와 단어 사이의 경계

\B

단어 사이의 경계가 아닌 것

\t

Tab 문자

\xnn

16진수 nn에 해당하는 문자


※ [ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.

 

참조 :

http://highcode.tistory.com/6

http://lng1982.tistory.com/141

http://iamnotokay.tistory.com/85 [I am not Okay]



'Programming > 정규표현식' 카테고리의 다른 글

정규 표현식이란?  (0) 2017.05.07

구조

for 변수 in 리스트(또는 튜플, 문자열):

    수행할 문장1

    수행할 문장2

...

 

Range()

for문은 숫자 리스트를 자동으로 만들어 주는 range라는 함수와 함께 사용되는 경우가 많다.

>>> a = range(10)

>>> a

range(0, 10)

range(10)0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.

 

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.

 

>>> a = range(1, 11)

>>> a

range(1, 11)


for문과 range() 예시 

forrange 함수를 이용하면 1부터 10까지 더하는 것을 다음과 같이 쉽게 구현할 수 있다.

>>> sum = 0

>>> for i in range(1, 11):

...     sum = sum + i

...

>>> print(sum)

55

range(1, 11)은 숫자 1부터 10까지(1 이상 11 미만)의 숫자를 데이터로 갖는 객체이다. 따라서 위의 예에서 i 변수에 리스트의 숫자들이 1부터 10까지 하나씩 차례로 대입되면서 sum = sum + i라는 문장을 반복적으로 수행하고 sum은 최종적으로 55가 된다.


참조 : 점프 투 파이썬(https://wikidocs.net/22)

'Programming > Python' 카테고리의 다른 글

사용자 입출력  (0) 2017.05.08
함수  (0) 2017.05.08
while 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07
자료형(6) - 집합(Set)  (0) 2017.05.07

while 조건문 :

    수행할 문장1

    수행할 문장2

    수행할 문장3

    ...

 

무한루프

while true : 

    ~~~


 

break

while문을 강제로 빠져 나간다.

 

continue

while문 안의 문장을 수행할 때 입력된 조건을 검사해서 조건에 맞으면 while문의 맨 처음(조건문)으로 다시 돌아가게 한다.



참조 : 점프 투 파이썬(https://wikidocs.net/21)

'Programming > Python' 카테고리의 다른 글

함수  (0) 2017.05.08
for 문  (0) 2017.05.08
if-elif-else 문  (0) 2017.05.07
자료형(6) - 집합(Set)  (0) 2017.05.07
자료형(5) - Dictionary  (0) 2017.05.07

기본 구조

If 조건문 :

    수행할 문장1

    수행할 문장2

    ...

elif 조건문 :

    수행할 문장1

    수행할 문장2

    ...

else:

    수행할 문장1

    수행할 문장2

    ...

 

요즘 파이썬 커뮤니티에서는 들여쓰기를 할 때 공백(Spacebar) 4개를 사용하는 것을 권장한다.

 

and, or, not

연산자

설명

x or y

xy 둘중에 하나만 참이면 참이다

x and y

xy 모두 참이어야 참이다

not x

x가 거짓이면 참이다

 

x in s, x not in s

in

not in

x in 리스트

x not in 리스트

x in 튜플

x not in 튜플

x in 문자열

x not in 문자열



참조 : 점프투 파이썬 (https://wikidocs.net/20)

'Programming > Python' 카테고리의 다른 글

for 문  (0) 2017.05.08
while 문  (0) 2017.05.08
자료형(6) - 집합(Set)  (0) 2017.05.07
자료형(5) - Dictionary  (0) 2017.05.07
자료형(4) - 튜플  (0) 2017.05.07

+ Recent posts