Pair RDD란?

Pair RDD란? Pair RDD라는 것은 키-값 쌍(Key-value pair) 구조로 되어있습니다. Key-Value 구조는 다양하게 쓰이는데요, 그 중에 하둡 맵리듀스(MR), 캐싱 시스템이나 NoSQL 데이터베이스(Redis 등)에서 많이 쓰입니다.  Spark에 Key-Value라고 하면 Scala나 Java에서는 맵(map)이라고도 하고 Python에서는 딕셔너리(Dictionary) 구조라고 할 수 있겠죠? 꼭 Pair RDD 구조를 사용하지 않아도 되지만, 데이터를 편리하게 집계, 정렬, 조인할 수 있다는 강점이 있습니다! 한 가지 더! 스파크가 데이터를 파티션으로 나누고 이 파티션을 적절히 변경하고 활용할 수 있습니다. 파티셔닝과 연관된 것이 바로 '셔플링'이라고 하는 데 셔플링은 연산이 많이 필요하기때문에 데이터의 불필요한 셔플링을 피하는 방법도 중요합니다! 데이터의 그루핑, 정렬, 조인 연산 뿐아니라 누적 변수와 공유 변수 등 다양한 데이터 타입 및 방법들에 대해 알아보면 좋을 것 같아요.  <Pair RDD 생성> SparkContext의 일부 메서드는 Pair RDD를 기본으로 반환합니다. RDD의 keyBy 연산자에서는 RDD 요소로 키를 생성하는 함수를 받고 각 요소를 튜플로 매핑합니다.  예)  scala) val data = sc.textFile("/home/data/test.txt") scala) val trandata =data.map(_.split(",")) --> , 를 기준으로 split scala) val pairdata = trandata.map(tran => (tran(2).toInt, tran)) --> PairRDD 생성 마지막 .map(tran(2).toInt, tran)이 결국 앞에가 Key 뒤에가 Value가 됩니다.  즉, 데이터를 파...

2. Python - Array 배열 예제 알고리즘

리스트에서 같은 원소 찾아내기 L이라는 List 내에 x라는 요소가 포함되어 있는 위치인 Index를 찾아서 samenum_idx 리스트 안에 Insert()해주는 거에요. 저는 enumerate()를 사용을 했는데 L 안에 있는 요소인 num과 찾고자 하는 x 요소를 비교해가며 같다면 index를 찾아낸 알고리즘입니다. 아래 코드를 참고해주세용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 def solution (L, x): samenum_idx = [] try : for index, num in enumerate(L): if num == x: samenum_idx . append(index) else : pass if len(samenum_idx) == 0 : samenum_idx . append( - 1 ) except : print ( "예외발생" ) return samenum_idx

3. Python - Array 배열 이진 탐색 구현

리스트 - 이진 탐색 알고리즘 이진 탐색 알고리즘 이진 탐색은 데이터가 정렬이 되어있어야만 의미가 있어요. 당연하겠지만 정렬이 되어있지 않다면 절대 쓰면 안되는 것입니당. 이진 탐색이라는 것은 예를 들어, 배열이 list1 = [1,3,5,6,7,8,24,43,55,67] 이라면 24를 찾게 될 때 전체 list에 중간에서 부터 탐색이 시작됩니다. 그렇게 하다보면 일일이 하나 씩 Searching하는 것 보다 더 효율적이겠죠. Python 코드로 구현해보았습니다. 3 가지가 핵심인데요. 이 3가지로만 Loop를 돌리게 되면 금방 탐색을 할 수 있죵. lower - 시작 변수  upper - 끝 변수 middle = 시작과 끝의 중간 변수  1 2 3 4 5 6 7 8 9 10 11 def solution (L, x): lower = 0 upper = len(L) - 1 answer = - 1 while ( lower <= upper ): middle = (lower + upper) // 2 if L[middle] > x: upper = middle - 1 elif L[middle] < x: lower = middle + 1 else : return middle return answer

1. Python - Array 배열

Arrays 1. 배열이란? Python에서 Array는 List라고 하죠. 데이터를 선 처럼 일렬로 쭉 늘어선 형태를 말합니다! 가장 흔하게 사용하는 것인데 어떤 자료구조를 이용하느냐에 따라 효율적으로 기능을 발휘할 수도 혹은 없을 수도 있어요. 그 연산들을 한 번 볼게요. 2. Python 리스트에 활용할 수 있는 연산들 1) 리스트 길이와 관계없이 빠르게 실행 결과를 보게 되는 연산들 (1) 원소 덧붙이기    : .append() (2) 원소 하나 꺼내기    : .pop() 리스트 맨 끝에 있는 요소를 .pop()을 이용해서 빼는 건 시간이 걸리지 않습니다. 하지만 특정 위치의 요소를 제거하고자 하면 시간이 걸리겠쬬? 2) 리스트의 길이에 비례해서 실행 시간이 걸리는 연산들 (1) 원소 삽입하기    : .insert() (2) 원소 삭제하기    : .del() 이런 연산들은 리스트의 길이에 따라 시간도 비례하게 걸립니다. 네... 참고해야되겠쥬?  List를 이용해서 함수를 만들고자 할 떄, 가장 효과적인 방법을 찾고 계신다면 자료구조를 배워보시는걸 추천합니다~

4. Databricks - Azure Data Lake Storage Gen2 연동하기

이미지
 Databricks - Azure Data Lake Storage Gen2 연동하기 (Azure Active Directory와 Key-vault로)  개요 네... 혹시 연동 작업에서 에러가 나고 삽질을 하셨나요?ㅜㅜ 저의 삽질기는 졸업하고 깔끔하게 정리하여 공유하고자 합니다. 화..화이팅!! 작업 Process 1. Databricks Secret 생성   네, 전 포스트에서 Secret과 Azure Key-Vault에 대해 포스팅을 했는데 여기에서도 한 번 더 언급하겠습니다.  일단 databricks에 제공하는 Token은 Configure하시구요,  >databricks configure --token Databricks Host (should begin with https://): https://eastus.azuredatabricks.net Token: 추가적으로, Workspace에 생성된 notebook도 확인 command를 해볼까요? >databricks workspace ls /Users/mj_ datalake 네 이제는 Secret을 생성해보겠습니다. Secret생성 전에 Azure Portal에서 Azure Key-vault 리소스를 인스톨하구요, 속성 내 DNS과 리소스Id를 복사해둡니다. 이제, 데이터브릭스 포탈로 들어갑니다. 포탈 url에 뒤에 /#secrets/createScope 를 붙여 아래와 같은 페이지로 들어갑니다! 이제 앞에 복사해두었던 DNS와 리소스 Id를 아래에 붙여넣습니다.  이제 Secret Scope이 생성되었는지 확인해불까요? Databricks_CLI를 통해 확인가능합니다. >databricks secrets list --scope {Scope명} Key name   ...

3. Azure Databricks Secret으로 Blob Storage Mount

이미지
Azure Databricks Secret으로 Blob Storage Mount  개요 Databricks File System 내부로 Azure Blob 스토리지의 지정 컨테이너를 Mount하여 편리하게 ETL 할 수 있습니다. 그 과정에 필요한 것은 바로 Secret과 Azure Blob Accout에 SAS를 활용하면 가능합니다. 작업 Process 1. Azure Blob IAM(엑세스제어) 등 Azure Portal에 AAD(Azure Active Directory) 로 들어가서 App Registrations 를 선택합니다. +새등록 을 통해 앱 등록을 진행합니다. Mount 할 Blob Storage에 컨테이너 가 없다면 생성하시고 있으면 해당 컨테이너로 들어갑니다.  해당 컨테이너에 들어가서  엑세서 제어(IAM) 에 들어갑니다. +새등록 을 누르셔서 역할할당추가 를 선택합니다.  역할 할당 추가에서 역할 을 통해 Databricks 내 Access하려는 Permission을 제한을 둘 수 있습니다. 그리고 선택부분에 앞서 AAD에 만들었던 App Registration 생성 이름 을 서치하시고 선택하셔서 할당을 추가하면 됩니다. 네 이제 Mount할 Azure Blob내 컨테이너 역할 할당은 완료했습니다!  그렇담 이제 Databricks로 넘어가 mount해기위한 Secret과 Scope을 확인해볼게요. 2. Secret과 Scope 확인하기. 저는 Databricks CLI로 확인을 할거에요. 혹시 Databricks CLI도 모르겠고 Secret도 뭔지 모르겠다 하시는 분들은 1,2 번 포스팅을 먼저 확인하시면 됩니다!  아래와 같이 databricks secrets 리스트를 확인하며 그 부분들 Mount할 때 필요한 정버들입니다. C:\Users\박민지>datab...

2. Azure Databricks - Azure Key Vault 연동하기.

이미지
Azure Databricks with Key Vault 연동  개요 Databricks는 Apache Spark 클러스터를 MS Azure Cloud 위에서 사용할 수 있는 PaaS형 서비스 입니다. 여기서! Blob Storage나 Data Lake Storage, Data Warehouse에 데이터 소스를 Cluster 위에 올려서 작업을 해야 할 경우에 Key Vault를 연동하게 되면 Mount하여 데이터를 올려 사용할 수 있습니다. 그 작업 프로세스 부분을 정리해보았어용~ 연동 작업 1. Azure Key-Vault 생성 키 자격 증명 모음에 추가하여 새로 생성합니다. 생성이 다 되었으면 그 리소스 클릿하시고 왼쪽 아래에 속성을 선택합니다. 그러면 아래와 같이 뜨는데요, 저희가 필요한건 DNS 이름과 리소스 ID입니다! 2. Databricks에서 createScope 생성 Databricks 포털 URI에서  /#secrets/createScope 를 붙이시면 해당 페이지가 나와용. https://<location>.azuredatabricks.net/#secrets/createScope 위에 만들어 두었던 Key-Vault에 DNS이름과 리소스 ID를 해당 칸에 붙여넣습니다.  3. Databricks에서 Secret Scope 생성 완료 확인 생성이 다 되었다면 이제 Scope 생성이 완료되었는지 확인해볼게요. Databricks CLI를 사용하기 위해 CMD 창을 켭니다. (Databricks CLI 설치는 이미 포스팅 해놨습니다! 참고 부탁 ㅋㅋ)  (mingdi) C:\Users\박민지>databricks secrets list-scopes Scope    Backend -------  -------------- test1 ...