본문 바로가기

분류 전체보기52

DataFrame과 Schema(스키마) (feat. Spark 스키마란 데이터 자료의 구조, 자료의 표현 방법, 자료 간의 관계 정의한 데이터의 '구조'이다. from pyspark.sql import SparkSession sparkSession = SparkSession.builder.appName('spark_test_2').getOrCreate() lines = sparkSession.read.csv('/home/hdoop/py-scripts/employee.csv') print(type(lines)) lines = lines.toDF('id','name','salary','job') lines.show() lines.printSchema() #데이터의 구조를 보여준다. 위 코드는 반정형 데이터인 csv데이터를 DataFrame객체로 받아서 컬럼명을 설정하고.. 2021. 9. 16.
RDD -> DataFrame(feat. Spark) RDD에서 DataFrame으로 변환할 때에는 RDD에 포함된 모든 행을 Row오브젝트로 변환하는 과정이 요구된다. *각 컬럼의 스키마가 추론할 수 있는 질서있는 데이터셋이라면 RDD.toDF()를 통해 데이터프레임으로 바로 변환 가능하다. from pyspark.sql import Row row = Row(num=11, name='smith') print(row.num, row.name) *Pyspark모듈의 Row함수에 컬럼명과 값을 입력해주면 DataFrame 형식처럼 컬럼명과 필드값이 저장된 Row객체가 생성된다. 예) # employee의 정보를 가지고 데이터프레임을 만들어 본다 from pyspark.sql import SparkSession, Row ss = SparkSession.build.. 2021. 9. 16.
RDD 가공/처리 함수 데이터를 RDD객체로 만드는 방법은 SparkSession의 parallelize()함수를 이용한다. rdd = sparkSession.sparkContext.parallelize ( ['scala', 'java', 'hadoop', 'spark', 'akka', 'spark vs hadoop', 'pyspark', 'pyspark and spark']) rdd # ParallelCollectionRDD rdd2 = rdd.filter(lambda x: 'spark' in x) # PythonRDD[33] rdd2.collect() 예를들어 위의 코드에서 여러 문자열이 담긴 리스트(List)를 sparkContext의 parallelize()함수에 넣으면 return된 객체는 RDD임을 알 수 있다(rd.. 2021. 9. 16.
프로그래머스_N으로 표현 https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 접근법 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 구하는 문제이다. 즉 5를 이용해 10을 구하는 최소의 5 사용법은 (5+5) : 2개, 60을 구하는 방법은 (55 + 5) : 3개 이다. N이 필요한 최소 개수가 9 이상이라면 -1을 return하므로 8개 까지 필요한 경우만 생각하면 된다. 내가 생각한 문제 접근법을 설명하면 *N이 n개 사용될 때 구할 수 있는 값들의 종류 - N이 1개일 때 경우의 수 +,-,*,/ N이 n-1개일 때 경우의 수 - N이 2개일 .. 2021. 9. 16.
RDD와 비정형데이터(feat. Spark) 데이터프레임은 가공이된, 검색/변경등이 편리한 '고수준' 데이터를 다룬다. 비정형 데이터와 같이 '저수준' 데이터 다룰때는 데이터를 우선 가공해야 관리하기 편하다. *빅데이터의 종류 정형데이터 : RDD(Resilient Distributed Dataset), Excel, etc. 비정형데이터 : Text, Image, Video, etc. 반정형데이터 : XML, JSON, CSV, etc. *RDD란 스파크의 가장 초기부터 도입된 가장 기초적인 데이터 구조이다. - Resilient(회복력 있는, 불변한) Distributed(분산된) Dataset(데이터셋) - RDD는 기본적으로 불변의 특성을 가지기 때문에 처리과정을 하기 위해서는 기본 RDD에서 새로운 RDD를 만들 수 밖에 없다. - 여러 과.. 2021. 9. 15.
subprocess 모듈 (feat. python) subprocess라는 모듈을 토해 리눅스 터미널 실행 명령어를 파이썬에서 실행시킬 수 있다. 예) import subprocess src_path = '/user/wan/part-00000*.csv' dest_path = '/user/wan/ms_stock.csv' subprocess.call(["hdfs", "dfs", "-cp", src_path, dest_path]) print('파일 복사 완료') spark를 통해 저장된 파일은 park-0000으로 시작되는 매우 긴 이름을 가지게 된다. 나중에 그런 파일을 read() 할때 이름을 전부 적어주는 것은 매우 비효율적인 일이다. subprocess를 활용해 그 이름을 간단하게 바꿔주고 작업을 할 수 있다. src_path = 파일의 경로(예시는 p.. 2021. 9. 15.
Arrow 모듈과 DataFrame(feat. Pandas, Spark) DataFrame은 Pandas의 DataFrame, Spark의 DataFrame 두개가 존재한다. -두개의 객체는 서로 다른 객체이다. 하나는 pandas의, 다른 하나는 spark의 객체이다. 이런 Pandas와 Spark의 DataFrame을 서로 호환해주는 Tool이 있다. - 예를들어 Pandas의 데이터프레임에 주식 데이터를 저장하고 csv파일로 만든 뒤, 만든 csv파일을 spark의 데이터프레임으로 다시 불러와야 하는 작업이 있는데 만약 여기서 사용된 두 데이터프레임이 서로 호환이 된다면 중간에 파일을 저장하고 불러오는 번거로운 작업을 줄일 수 있을 것이다. Arrow 모듈 Arrow 모듈이 위에서 설명한 Pandas와 Spark의 두 데이터프레임을 호환해주는 모듈이다. 사용법 impor.. 2021. 9. 15.
Pyspark 사용 예시(3) from pyspark.sql import SparkSession sparkSession = SparkSession.builder.appName("pyspark-hdfs2").getOrCreate() #read.load()는 다양한 옵션을 설정할 수 있다 df2 = sparkSession.read.load('/home/hdoop/employee.csv', format = 'csv', sep=',', inferSchema='true', header='true') df2.show() df2 = df2.withColumn('salary', df2.salary+5000) df2.show() df2 = df2.withColumn('salary', df2.salary * 1.05) df2.show() 1. spar.. 2021. 9. 15.
Pyspark 사용 예시(2) view는 메모리상의 가상 table과 같은 구조이고 실제로 존재하진 않는다. Spark는 메모리에 view라는 테이블을 만들고 그 view를 sql로 다룬다. from pyspark.sql import SparkSession sparkSession = SparkSession.builder.appName("pyspark-sql-test").getOrCreate() df = sparkSession.read.csv('hdfs://localhost:9000/user/diabetes_info/diabetes.csv') df.show() df.createOrReplaceTempView("diabetes") df2 = sparkSession.sql("select count(*) from diabetes") df3 .. 2021. 9. 15.