2021/05 9

spark udf

udf(user define function) in spark 초간단히 정리... parquet에서 데이터를 읽어서 dataframe으로 작업을 좀 하고 mysql로 insert를 하는데 필드에 이모찌가 포함이 되어있어서 mysql로 삽입중 에러가 난다. dataframe의 특정 필드에서 이모찌를 지우는 작업을 해주었다. pyspark. https://spark.apache.org/docs/3.0.1/api/python/pyspark.sql.html#pyspark.sql.functions.udf from pyspark.sql import SparkSession from pyspark.sql.functions import udf from pyspark.sql.types import StringType im..

data engineering 2021.05.30

leetcode 1845(heap), 1557(graph, dfs), 1325(트리)

1845 https://leetcode.com/problems/seat-reservation-manager/ 예약, 예약취소기능을 구현해야하고, 예약시에는 현재 예약가능한 좌석중에서 가장 번호가 낮은 좌석을 예약한다. == 현재 리스트에서 항상 가장 번호가 낮은 좌석을 가져오려면 힙을 만들어서 pop만 해주면 된다. 예약취소시에 새로 들어온 숫자까지 합쳐서 매번 정렬하는것보다는 힙으로 구현하는게 더 시간복잡도가 적게걸린다. import heapq class SeatManager(object): def __init__(self, n): self.available_seat = range(1, n+1) heapq.heapify(self.available_seat) def reserve(self): return..

spark + scala mongo to mysql 8+(jdbc), 궁금증 몇개

공부용으로 간단하게 만든 코드를 올린다. 코드를 짜면서 어떤걸 유의해야 되었는지 등을 더 적는다. 제목 그대로 몽고에서 데이터를 가져와서 가공했다고 가정하고, jdbc를 사용해서 mysql(8+버전)으로 삽입하는 예제이다. scalaApp2.scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.SaveMode import java.util.Properties object scalaApp2 { def main(args: Array[String]): Unit = { val spark = SparkSession.builder.appName("get data").getOrCreate() val (mongo_user, mongo_pa..

data engineering 2021.05.17

spark + scala 세팅.

spark를 공부하면서 scala라는 언어 자체를 깊게 파지는 않더라도 알아둘 필요가 있어서 정리해놓는다. 내 기준으로 이해하기 쉽게 정리해놓은거라서 다른 사람들은 환경이 다를 수 있음. 환경은 spark 3.0.1 + scala 2.12로 하려고 한다. 사실 저번글 qkqhxla1.tistory.com/1143?category=698045 에서 스파크 스트리밍을 가볍게 만지면서 pyspark로 가벼운 예제 코드도 아래에 더 추가하려고 삽질했었다. 그런데 글 끝에 적었듯이 스파크 스트리밍은 아직 pyspark가 지원 안하는게 많다. 예로 mongo로 스트리밍으로 쓰는것도 scala만 지원한다. 데이터 처리를 진짜 끝까지 하려면 스칼라가 그래도 필요하다는 생각에 공부겸 + 업무와 연관해서 조금씩 정리하려고..

data engineering 2021.05.08

spark streaming(dstream, structured streaming) 정리 + 삽질

spark streaming 에 대해 읽고 간단히 정리한다. spark streaming에는 dstream과 structured streaming의 두가지가 있다. 1. dstream (spark.apache.org/docs/latest/streaming-programming-guide.html#input-dstreams-and-receivers) dstream의 input으로는 파일스트림, 소켓 연결, 카프카로의 입력이 기본적으로 제공된다. custom receiver를 구현할 수도 있는데 scala나 java를 사용해 구현해야 한다. spark.apache.org/docs/latest/streaming-custom-receivers.html 흐름을 파악하기 위해 소켓 연결 워드카운트 예제를 가볍게 정..

data engineering 2021.05.06

kafka관련 좋은글 링크

글 대부분을 유용한 팁을 적어주시고, 필요한 것 위주로 이해하기 쉽게 적어주심. 몇년전 글이지만 여러번 읽어볼것 같다. 카프카 운영자가 말하는 처음 접하는 카프카 : www.popit.kr/kafka-%EC%9A%B4%EC%98%81%EC%9E%90%EA%B0%80-%EB%A7%90%ED%95%98%EB%8A%94-%EC%B2%98%EC%9D%8C-%EC%A0%91%ED%95%98%EB%8A%94-kafka/ 카프카 운영자가 말하는 카프카 컨슈밍 그룹 : www.popit.kr/kafka-consumer-group/ 카프카 설치시 가장 중요한 config : www.popit.kr/%ec%b9%b4%ed%94%84%ec%b9%b4-%ec%84%a4%ec%b9%98-%ec%8b%9c-%ea%b0%80%ec..

data engineering 2021.05.03