# pd (판다스)

import pandas as pd
# import pyspark.pandas as ps

my_list = [[230.1, 37.8, 69.2, 22.1], [44.5, 39.3, 45.1, 10.4],[17.2, 45.9, 69.3, 9.3],[151.5, 41.3, 58.5, 18.5]]
col_name = ['TV', 'Radio', 'Newspaper', 'Sales']

#-- pd --
drop_name = ['Newspaper', 'Sales']
dp = pd.DataFrame(my_list, columns= col_name)
dp.drop(drop_name, axis=1).head(4)

 

 

# PS (spark)

import pyspark.pandas as ps
spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()
ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
#-- ps --
drop_name = ['Newspaper', 'Sales']
ds.drop(*drop_name).show(4)

 

5.3.10 추출(Filter)

 

# pd (판다스)

import pyspark.pandas as ps
from pyspark.sql import SparkSession
# 주의 !! databricks에서 pandas의 csv파일 read하려면 로컬에 파일이 있어야만 가능하기 때문에 교재명령은 불가능
# dp = pd.read_csv('Advertising.csv') 교재예시
# 그래서 편법으로 아래와 같이 사용함

import pandas as pd

df_pandas = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True).toPandas()
df_pandas.head(4)

df_pandas['TV'] = df_pandas['TV'].astype(float)
df_pandas['Radio'] = df_pandas['Radio'].astype(float)
df_pandas['Newspaper'] = df_pandas['Newspaper'].astype(float)
df_pandas['Sales'] = df_pandas['Sales'].astype(float)

# df_pandas.dtypes
df_pandas[df_pandas.Newspaper<20].head(4)
df_pandas[(df_pandas.Newspaper<20)&(df_pandas.TV>100)].head(4)

 

 

# PS (spark)

ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
ds[ds.Newspaper<20].show(4)
ds[(ds.Newspaper<20)&(ds.TV>100)].show(4)

 

 

5.3.11 새 컬럼 추가하기

 

#-- df_pandas
df_pandas['tv_norm'] = df_pandas.TV/sum(df_pandas.TV)
df_pandas.head(4)

#-- ps
import pyspark.sql.functions as F
ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
ds.withColumn('tv_norm', ds.TV/ds.groupBy().agg(F.sum("TV")).collect()[0][0]).show(4)

 

#-- df_pandas
df_pandas['cond'] = df_pandas.apply(lambda A: 1 if((A.TV>100)&(A.Radio<40)) else 2 if(A.Sales> 10) else 3,axis=1)
df_pandas.head(4)

#-- ps
ds.withColumn('cond', F.when((ds.TV>100)&(ds.Radio<40),1)\
    .when(ds.Sales>10, 2)\
    .otherwise(3)).show(4)

 

 

#-- df_pandas
import numpy as np
df_pandas['log_tv'] = np.log(df_pandas.TV)
df_pandas.head(4)

#-- ps
import pyspark.sql.functions as F
ds.withColumn('log_tv', F.log(ds.TV)).show(4)

 

#-- df_pandas
df_pandas['tv+10'] = df_pandas.TV.apply(lambda x: x+10)
df_pandas.head(4)

#-- ps
ds.withColumn('tv+10', ds.TV+10).show(4)

 

 

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

AI Agent 구축  (2) 2025.04.30
5.3.13 열 결합하기(Concat)  (0) 2025.01.08
5.3.11 조인(Join)  (0) 2025.01.07
5.3.6 널(Null) 값 채우기  (0) 2024.12.25
5.1 RDD 생성  (0) 2024.12.15

# 모든 열의 이름 바꾸기

import pandas as pd
import pyspark.pandas as ps
from pyspark.sql import SparkSession

my_list = [[230.1, 37.8, 69.2, 22.1], [44.5, 39.3, 45.1, 10.4],[17.2, 45.9, 69.3, 9.3],[151.5, 41.3, 58.5, 18.5]]
col_name = ['TV', 'Radio', 'Newspaper', 'Sales']
# df
#-- pd --
dp = pd.DataFrame(my_list, columns= col_name)
dp.columns = ['a', 'b', 'c', 'd']
dp.head(4)

 

 

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()
ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
#-- ps --
ds.toDF('a', 'b', 'c', 'd').show(4)

 

 

# 하나 혹은  그 이상의 열 이름 바꾸기

mapping = {'Newspaper':'C', 'Sales':'D'}
#-- pd --
my_list = [[230.1, 37.8, 69.2, 22.1], [44.5, 39.3, 45.1, 10.4],[17.2, 45.9, 69.3, 9.3],[151.5, 41.3, 58.5, 18.5]]
col_name = ['TV', 'Radio', 'Newspaper', 'Sales']
#-- pd --
dp = pd.DataFrame(my_list, columns= col_name)
dp.rename(columns=mapping).head(4)

 

 

#-- ps --
ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
mapping = {'Newspaper':'C', 'Sales':'D'}
new_names = [mapping.get(col, col) for col in ds.columns]
ds.toDF(*new_names).show(4)

 

 

Note : PySpark에서 한 컬럼의 이름을 바꾸기 위해 withColumnRenamed를 사용 할 수도 있습니다.

#-- ps --
ds = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
ds.withColumnRenamed('Newspaper','Paper').show(4)

 

 

 

 

 

 

 

# import pandas as pd  # bricks는 import가 없어도 됨
# import pyspark.pandas as ps # bricks는 import가 없어도 됨

my_list = [['male', 1, None], ['female', 2, 3], ['male', 3, 4]]
#-- pd --
dp = pd.DataFrame(my_list, columns=['A', 'B', 'C'])
dp.head()

#-- ps --
ds = spark.createDataFrame(my_list, ['A', 'B', 'C'])
ds.show()

 

 

#-- pd --
dp.fillna(-99)
#-- ps --
ds.fillna(-99).show()

 

 

#-- pd --
# 주의 : 특정 컬럼을 선택해야 합니다.
dp.A.replace(['male','female'],['1', '0'], inplace=True)
dp
#-- ps --
# 주의 : na를 대체하면서 동시에 특정 열의 값을 대체하지 못합니다.
# 이 경우 특정 열의 대체 값만 진행됩니다.
ds.na.replace(['male', 'female'],['1', '0']).show()

 

 

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

AI Agent 구축  (2) 2025.04.30
5.3.13 열 결합하기(Concat)  (0) 2025.01.08
5.3.11 조인(Join)  (0) 2025.01.07
5.3.9 컬럼 삭제하기(Drop)  (0) 2024.12.25
5.1 RDD 생성  (0) 2024.12.15

# 아래 내용의 출처를 밝힙니다. 파이썬으로 배우는 아파치 스파크 ( Wenqiang Feng, 홍은희 )

 

RDD

: 복원 분산 데이터 집합(Resilient Distributed Dataset)를 의미합니다.

스파크의 RDD는 불변 객체 집합의 분산 컬렉션(collection)입니다.
각 RDD는 여러 개의 파티션(더 작은 집합과 비슷한 패턴)으로 나뉘며 클러스트의 다른 노드에서 계산될 수 있습니다.

 

# RDD 생성_00 기본형

from pyspark.sql import SparkSession

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.sparkContext.parallelize([(1,2,3,'a b c'),
            (4,5,6,'d e f'),
            (7,8,9,'g h i')]).toDF(['col1', 'col2', 'col3', 'col4'])
df.show()

 

# RDD 생성_01 createDataFrame를 이용한 생성, 컬럼명 명시

from pyspark.sql import SparkSession

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

Employee = spark.createDataFrame([
    ('1', 'Joe', '70000', '1'),
    ('2', 'Henry', '80000', '2'),
    ('3', 'Sam', '60000', '2'),
    ('4', 'Max', '90000', '1')],
    ['Id', 'Name', 'Sallary', 'DepartmentId']
    )
Employee.show()

 

# RDD 생성_02 

from pyspark.sql import SparkSession

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.read.format('com.databricks.spark.csv'). \
    options(header='true',inferschema='true'). \
    load("/home/feng/Spark/Code/data/Adventising.csv", header=True)

df.show(5)
df.printSchema()

 

# RDD spark 버전 확인

from pyspark.sql import SparkSession

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()
    
print('Apache Spark 버전 확인: '+spark.version)

결과>>  Apache Spark 버전 확인: 3.5.0

 

# RDD 생성_03 CSV 파일 load

from pyspark.sql import SparkSession

spark = SparkSession .builder \
    .appName("Python Spark create RDD example") \
    .config("spark.some.config.option", "some-value") \
    .getOrCreate()

df = spark.read.format("csv").load("/FileStore/tables/Advertising.csv", header=True)
df.show(5)
df.printSchema()

팁 ) databricks에서 제공하는 클라우드 spark환경에서 테이블 생성하기 위해 파일 업로드하는 위치를 지정가능함

파일올리면서 테이블을 생성해야 하고 그 위치는 /FileStore/tables/파일명

 

# RDD 생성_04 외부의 mysql 접속해서 테이블 조회하기

driver = "org.mariadb.jdbc.Driver"
database_host = "xxx.xxx.xxx.xxx"
database_port = "3306" # update if you use a non-default port
database_name = "xxxxxx"
table = "Advertising"
user = "xxxxx"
password = "xxxxx"
url = f"jdbc:mysql://{database_host}:{database_port}/{database_name}"
print(url)

df = (spark.read
.format("jdbc")
.option("driver", driver)
.option("url", url)
.option("query", "select * from Advertising")
.option("user", user)
.option("password", password)
.option("allowPublicKeyRetrieval", True)
.option("useSSL", False)
.load()
)
df.show(5)

팁 )  아래 두개를 .option에 넣어줘야 함

  • allowPublicKeyRetrieval=true
  • useSSL=false

# RDD 생성_05 hdfs 조회하기

from pyspark.conf import SparkConf
from pyspark.context import SparkContext
from pyspark.sql import HiveContext

sc = SparkContext.getOrCreate();
hc = HiveContext(sc)
tf1 = sc.textFile("hdfs://FileStore/tables/Advertising.csv")
    
print(tf1.first())
# 아직 코딩이 완성된 것이 아님

 

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

AI Agent 구축  (2) 2025.04.30
5.3.13 열 결합하기(Concat)  (0) 2025.01.08
5.3.11 조인(Join)  (0) 2025.01.07
5.3.9 컬럼 삭제하기(Drop)  (0) 2024.12.25
5.3.6 널(Null) 값 채우기  (0) 2024.12.25
안녕하세요 로그마리오입니다.

저는 컴퓨터로 작업을 이것저것 자주 하다보니 

집에 있는 컴퓨터로 작업을 하다가 

집 밖에서 남은 시간에 집에서 했던 작업을 하고 싶어도 못하게 되는게 아쉬웠습니다.


저는 IT업에 종사하고 있는데요

평소에 어떻게 하면 도구(컴퓨터,모바일기기,통신장비)가 사람에게 이롭게 해줄 수 있을까 ?

이런 생각을 구체적으로 하곤 했습니다.


이제는 세상이 좋아져서 이런 문제를 해소해주는 방법이 생겼습니다.

가상PC(클라우드PC)를 활용하는 것인데요


두가지 형태가 있습니다.


클라우드PC를 서비스해주는 곳이 있습니다.

또 다른 방법은 집에 있는 PC를 직접 이용해 클라우드PC 환경을 만드는 겁니다.


위 2가지 방법을 이용했을 경우 특징을 정리해보겠습니다.


1. 클라우드 서비스를 이용


 


위 이미지로 서비스에 대한 설명이 명확한 것 같습니다.

우리나라에서 클라우드PC서비스중 제가 익숙하게 많이 봐왔던 LG CND의 클라우드PC서비스를 하고 있는

http://www.mycloudpc.co.kr/

입니다.


언제 어디서든 어떤 기기로 사용하든 접속해서 PC를 이용할 수 있는 서비스입니다.


내집에 환경을 구성했을 때 보다 이점은 아래와 같습니다.


1. 매월 지불하는 금액에 소프트웨어 비용도 포함되어 있을텐데

  윈도우, MS오피스 같은 정품을 사용하기 때문에 사업하시는 분들은 특히 불법소프트웨어의 압박으로 오는 스트레스가 많이 줄어듭니다.

2. 관리자 기능이 있어서 OS초기화나 일정수준의 소프트웨어적인 세팅을 지원하기 때문에 다시 세팅하거나 백업할 때 신속하고 편리하게 관리가 됩니다.

3. 실제 물체가 없기 때문에 물질적으로 챙겨야 하는 것이 없어 신경쓸 일이 없습니다.

4. 서비스업체로 부터 일정수준의 해킹으로 부터 방어를 해주고 기타 보안이 보장됩니다.


2. 내 컴퓨터로 클라우드 환경을 구성해서 이용


대략적으로 어떻게 구성되는 건지 설명하자면,

우선 집에 컴퓨터가 있어야 하고 유선인터넷이 가입되어 있어야 합니다.

컴퓨터에 OS(윈도우)설치하고 가입인터넷 장비에 집밖에서 접속할 수 있도록 공유기에 설정을 해두면

위에 클라우드PC서비스와 같이 클라우드환경이 마련되었다고 보시면 됩니다.


여기서 잠깐 집고 넘어가야 할 것이 있는데

집에 있는 컴퓨터라고 말은 했지만 대부분 일반 데스크탑이나 노트북을 생각하실 것 같습니다.

물론 이런 PC를 이용해도 당장 문제는 없지만 하루 종일 컴퓨터를 켜놓아야 하므로

일반 데스크탑이나 노트북은 이런 상황을 예상하고 만들어지지 않아 수명이 줄거나 소음이 나기 때문에

집에 있는 PC로 어느 정도 클라우드PC 생활을 해보시고

정말 오래 이용할 것 같다면 장기적인 대안이 필요합니다.


그렇다면 하루 종일 켜도 문제없는 서버를 사야 한단 말인가 ?

결론은 아닙니다 !


제가 추천하는 제품인데요

저전력, 저소음, 손바닥크기의 작은 크기

가정용 미니서버급으로 제가 본 것 중 가장 적합하다고 판단하는 제품입니다.


liva-x (리바-x) 가격은 30만원 초반대 (본체와 하드디스크포함) - 2016년 3월기준


클라우드PC 서비스을 이용했을때 보다 이점은 아래와 같습니다.


1. 초기 비용은 클라우드PC 서비스를 이용했을때 보다 많이 들지만(PC를 구입했을 경우) 

  시간이 흐를수록 집에서 매월 부과하는 인터넷비용과 전기세가 이외는 비용이 들지 않아 유지비용이 낮아집니다.

2. 클라우드PC서비스는 일반적인 수준에서 환경이 세팅되고 서비스를 하기 때문에 내 마음대로 PC를 변경하거나 기능추가 장착에 제한이 있지만 

  집에 있는 내 컴퓨터는 내 마음대로 이것저것 시도해 볼 수 있습니다.

3. 집에 있는 전자기기(특히 IPTV)와 연계해서 여러가지 편리한 생활을 경험해 볼 수 있습니다.

4. 접속해서 이용시 클라우드PC서비스보다 체감상 속도가 우수하고 하드디스크용량도 비용대비 큰 용량을 이용할 수 있게 됩니다.


 == SUMMARY == 


 1. 클라우드 서비스를 이용

 2. 내 컴퓨터로 클라우드 환경을 구성


 - 인터넷환경이나 물리적으로 관리할 물체가 없으므로 유지하기가 편합니다.

 - 일정 수준의 보안을 신경쓰지 않아도 됩니다.

 - 일정비용이 소비되며 시간이 흐를 수록 유지비용이 높아집니다.


 - 인터넷을 가입해야 하고 컴퓨터를 설치하고 물리적인 공간이 필요합니다.

 - 해킹이나 바이러스를 조심해야 합니다.

 - 한번 설치하고 환경을 마련하면 시간이 흐를 수록 유지비용이 낮아집니다.

 - 집에 있는 다른 기기(IPTV)와 연결하여 추가적인 생활의 편리함이 가능해집니다.



3. 각종 접속 기기 ( PC, 스마트폰, 태블릿 )


클라우드 환경마련이 다 되었다면 이제 접속해봐야하는 기기는 얘기입니다.

PC와 스마트폰을 통해 접속해보는건 대부분 가지고 있고 접할 수 있는 기기이고


태블릿은 키보드를 사용하기 적당한 크기이고 휴대성이 좋기 때문에

커피숍을 가거나 지하철을 탔을 때 특히 그 가치가 대단합니다.


자주 클라우드PC를 사용하고 장소에 구애받지 않고 쾌적하게 이용하려면

LTE 기능이 탑재된 태블릿PC을 추천드립니다.

안드로이드계열과 IOS 별로 특징별로 추후 강좌를 통해 상세히 알아보겠습니다.


이상으로 어디서든 내컴 사용하기(나만의 클라우드PC) 개요편을 마치겠습니다.

+ Recent posts