[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
vim streaming_test.py
from pyspark import SparkContext
from pyspark.streaming import StreamingContext
# Create a local StreamingContext with two working thread and batch interval of 1 second
sc = SparkContext("local[2]", "NetworkWordCount")
ssc = StreamingContext(sc, 1)
# Create a DStream that will connect to hostname:port, like localhost:9999
lines = ssc.socketTextStream("localhost", 9999)
# Split each line into words
words = lines.flatMap(lambda line: line.split(" "))
# Count each word in each batch
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)
# Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.pprint()
ssc.start() # Start the computation
ssc.awaitTermination() # Wait for the computation to terminate
nc -lk 9999
입력
새 프롬프트 창 실행 후 spark-submit streaming_test.py localhost 9999
기존의 프롬프트창에서 뭔가를 입력해보자.
pyspark.mllib
-> pyspark.ml(DataFrame 기반의 Machine Learning Package로 전환)
# 벡터 생성
from pyspark.ml.linalg import Vectors
denseVec = Vectors.dense(1.0, 2.0, 3.0)
size = 3
idx = [1, 2]
values = [2.0, 3.0]
sparseVec = Vectors.sparse(size, idx, values)
# 샘플 로딩
df = spark.read.json("/home/big/data/simple-ml/")
df.show()
# 고객 건강 데이터셋
# color : 건강 등급
# lab : 실제 건강 상태
# value1 / value2 : 사이트 체류 시간 / 구매 소요 시간
###
from pyspark.ml.feature import RFormula
# RFormula : 데이터 변환 설정
# MLlib에서 사용할 수 있는 데이터 형태로 변환 (Double / Vector[Double] : 레이블 / 값)
# ~ : target과 term 분리
# + : 연결
# - : 삭제
# : 상호작용 (곱셈)
# . : 모든 컬럼
# 모든 변수를 사용해서, value1과 color / value2와 color를 곱해서 새로운 값으로 변경
supervised = RFormula(formula="lab ~ . + color:value1 + color:value2")
# dataframe
fittedRF = supervised.fit(df)
preparedDF = fittedRF.transform(df)
preparedDF.show(5, False)
# 여기까지가 데이터 전처리
# trainset / testset 분리
train, test = preparedDF.randomSplit([0.7, 0.3])
# 모델 알고리즘
from pyspark.ml.classification import LogisticRegression
lr = LogisticRegression(labelCol="label", featuresCol="features")
# lr에서 사용할 수 있는 파라미터 (하이퍼파라미터)
print(lr.explainParams())
# 학습 모델 생성
fittedLR = lr.fit(train)
# 학습 모델로 예측할 때 형태 확인
fittedLR.transform(train).select("label", "prediction").show()
### 사전학습이라고 함
# 파이프라인
train, test = df.randomSplit([0.7, 0.3])
# 변환
from pyspark.ml.feature import RFormula
rForm = RFormula()
from pyspark.ml.classification import LogisticRegression
lr = LogisticRegression().setLabelCol("label").setFeaturesCol("features")
from pyspark.ml import Pipeline
# 변환 및 모델 튜닝을 pipeline의 단계로 생성
stages = [rForm, lr]
pipeline = Pipeline().setStages(stages)
# 모델 학습
# ParamGridBuilder : 하이퍼파라미터를 조합해주는 객체
# elasticNetParam : 0 ~ 1 사이의 부동소수점 지정하여 가중치 생성
# regParam : 0보다 크거나 같은 값 지정. 가중치 생성
from pyspark.ml.tuning import ParamGridBuilder
params = ParamGridBuilder().addGrid(rForm.formula, ["lab ~ . + color:value1", "lab ~ . + color:value1 + color:value2"]).addGrid(lr.elasticNetParam, [0.0, 0.5, 1.0]).addGrid(lr.regParam, [0.1, 0.2]).build()
# rformular 2개 (color:value1, color: value2)
# eleasticnetparam 3개 (0.0, 0.5, 1.0)
# regparam 2개 (0.1, 0.2)
# 하이퍼파라미터를 변경하여 총 12개 학습
# 평가 객체
# 이진 분류 평가
# areaUnderROC : 그래프 아래쪽 면적을 계산하여 모델 평가 (얼마나 잘 맞추고 있는지)
from pyspark.ml.evaluation import BinaryClassificationEvaluator
evaluator = BinaryClassificationEvaluator().setMetricName("areaUnderROC").setRawPredictionCol("prediction").setLabelCol("label")
# k-fold (k-겹 교차검증)
# training set을 k개의 fold로 나누고, fold 중 하나를 validation set으로 사용 (나머지는 training set)
from pyspark.ml.tuning import TrainValidationSplit
tvs = TrainValidationSplit().setTrainRatio(0.75).setEstimatorParamMaps(params).setEstimator(pipeline).setEvaluator(evaluator)
# 파이프라인 구동 (학습)
tvsFitted = tvs.fit(train)
# 평가
evaluator.evaluate(tvsFitted.transform(test))
미리 pip install numpy
로 넘파이 패키지를 다운받아 놔야 한다.
우리들의 줌 채팅창 대화가 담겨있는 all.csv
를 우분투 /home 으로 옮겨준다.
cat all.csv
로 내용 확인
하둡으로 파일 옮기기 : hdfs dfs -put ./all.csv /home/big/all.csv
잘 올라갔는지 확인 : hdfs dfs -ls /home/big
파이스파크 실행 : pyspark
pyspark에서 all.csv파일 불러오기
multi = spark.read.format("csv").option('header', "true").load("/home/big/all.csv")
대화내용 줄 수 확인 : multi.count()
테이블 생성 후 확인
multi.createOrReplaceTempView("multi")
multi.show(multi.count())
채팅을 가장 많이 보낸 사람 순서대로 정렬해보자.(7등을 했다..ㅋㅋㅋㅋ😅)
from pyspark.sql.functions import col
multi.groupBy("chat_from").count().orderBy(col("count").desc()).show()
multi.where(col("chat_to") == "이동헌강사").groupBy("chat_from", "chat_to")\
.count().orderBy(col("count").desc()).show()
from pyspark.sql.functions import substring
multi.groupBy(substring("chat_time", 1, 2)).count().orderBy(substring("chat_time", 1, 2)).show()
multi.groupBy("chat_date").count().orderBy("chat_date").show()
multi.groupBy("chat_date", substring("chat_time", 1, 2))\
.count().orderBy("chat_date",substring("chat_time", 1, 2)).show()
hour_chat = multi.groupBy(substring("chat_time", 1, 2).alias("hour"), "chat_from")\
.count().orderBy(substring("chat_time", 1, 2), col("count").desc())
hour_chat.show(hour_chat.count())
hour_chat.write.format("csv").mode("overwrite").save("hour_chat")
로컬 호스트에서 확인하니 RDD가 하나씩 나뉘어서 저장되어있다.
hour_chat.coalesce(1).write.format("csv").mode("overwrite").save("/home/big/hour_chat")
coalesce()
를 사용해서 데이터를 나뉘지 않고 하나에 몰아서 저장된 것을 확인할 수 있다.
vim hour_chat.py
생성 후 내용 작성from pyspark.sql import SparkSession
from pyspark.sql.functions import col, substring
# SparkSession와 클러스터매니져 yarn을 사용해 세션 객체 생성
spark = SparkSession.builder.master("yarn").appName("hour_chat").getOrCreate()
multi = spark.read.format("csv").option("header", "true").load("/home/big/all.csv")
hour_chat = multi.groupBy(substring("chat_time", 1, 2).alias("hour"), "chat_from")\
.count().orderBy(substring("chat_time", 1, 2), col("count").desc())
hour_chat.coalesce(1).write.foramt("csv").mode("overwrite").save("/hour_chat")
pip instal pyspark
python hour_chat.py
spark-submit hour_chat.py
도 가능잘 올라갔는지 확인 : hdfs dfs -cat /hour_chat/*.csv
stop.all.sh
vim multi.sh
생성 후 작성 후 저장!# 하둡 등 On
start-all.sh
# 대기 시간 설정
sleep 20
pyspark
sudo chomd 755 multi.sh
./multi.sh
실행
sudo vim ~/.bashrc
# zeppelin
export ZEPPELIN_HOME=/home/big/zeppelin
export PATH=$PATH:$ZEPPELIN_HOME/bin
source ~/.bashrc
cd $ZEPPELIN_HOME/conf
ls
cp zeppelin-env.sh.template zeppelin-env.sh
vim zeppelin-env.sh
좌표 19,1
export JAVA_HOME=/home/big/java
좌표 79,1
export PARK_HOME=/home/big/spark
좌표 89,1
export HADOOP_CONF_DIR=/home/big/hadoop/etc/hadoop
cp zeppelin-site.xml.template zeppelin-site.xml
vim zeppelin-site.xml
좌표 24,1 value 부분(어디서든 접속 가능하게)
<value>0.0.0.0</value>
좌표 30,1 value부분
<value>8082</value>
cd
start-all.sh
zeppelin-daemon.sh start
FireFox에서 localhost:8082 로 접속
spark 검색 후 Edit 클릭
내용 수정 후 SAVE
[Notebook] - [Create New Note] 에서 노트 생성
노트북에 내용 작성 후 Run
%pyspark
test = [1,2,3,4,5]
test_rdd = sc.parallelize(test)
test_rdd.collect()
zeppelin-daemon.sh stop
, stop-all.sh
sudo apt install mysql-server -y
sudo service mysql start
sudo mysql_secure_installation
cd /etc/mysql/mysql.conf.d
sudo vim mysqld.cnf
어떤 IP든 접속 허용하게 만들기
31, 32번째 줄
bind-adderss = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
cd
sudo mysql -u root -p
use mysql;
alter user 'root'@'localhost' identified with mysql_native_password by '1234';
CREATE USER 'root'@'%' IDENTIFIED BY '1234';
%
는 ip 0.0.0.0 과 같다.GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
flush privileges;
exit
Ubuntu Linux 20 버전 선택 후 다운로드 클릭
링크 주소 복사
우분투에서 설치
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java_8.0.28-1ubuntu20.04_all.deb
압축 풀기
sudo dpkg -i mysql-connector-java_8.0.28-1ubuntu20.04_all.deb
cd /usr/share/java/
ls
cd $SPARK_HOME/conf
vim spark-defaults.conf
작성
spark.jars /usr/share/java/mysql-connector-java-8.0.26.jar
pyspark 켜기
start-all.sh
pyspark
pyspark에서 mysql에 접속하기 위한 변수 만들기
user="root"
password="1234"
url="jdbc:mysql://localhost:3306/mysql"
driver="com.mysql.cj.jdbc.Driver"
dbtable="test"
DB에서 데이터 불러오기
test_df = spark.read.format("jdbc").option("user", user).option("password", password)\
.option("url", url).option("driver", driver).option("dbtable", dbtable).load()
# .options로도 가능하다.
# test_df = spark.read.format("jdbc").options(user=user, password=password, url=url, driver=driver, dbtable=dbtable).load()
연결된 DB의 Table 확인
test_df.show()
새로운 데이터를 만들어 Insert준비
test_insert = [(3, "mysql"), (4, "zeppelin")]
insert_df = sc.parallelize(test_insert).toDF(["id", "name"])
insert_df.show()
지정한 DB의 테이블에 append(Insert)
insert_df.write.jdbc(url, dbtable, "append", properties={"driver": driver, "user": user, "password": password})
제대로 들어갔는지 확인
test_df.show()
MongoDB 홈페이지 [Resources] - [Documentation] - [Server] - [Installation]
해당 링크 복사
우분투에서 설치
wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-5.0.list
우분투 패키지 APT 업데이트 및 업그레이드
sudo apt-get update
sudo apt-get upgrade -y
mongodb 패키지 설치
sudo apt install -y mongodb-org
MongoDB 시동 걸기
sudo systemctl start mongod
mongodb 실행 : mongo
데이터 삽입 후 확인, 확인되면 종료
db.test.insert({"id":"10", "name":"mongo"})
db.test.find()
vim spark-defaults.conf
에 내용 작성
spark.mongodb.input.uri mongodb://localhost/test
spark.mongodb.output.uri mongodb://localhost/test
# spark.jar.packages org.mongodb.spark:mongo-spark-connector_2.12:3.0.1
spark.jars.packages설정이 제대로 동작하지 않아서, 실행할 때 –packages 옵션으로 dependency명시
pyspark --packages org.mongodb.spark:mongo-spark-connector_2.12:3.0.1
pyspark 실행 : pyspark
잘 연결되었는지 테스트
test라는 DB에서 test라는 collection에서 데이터를 가져와서 확인
test = spark.read.format("mongo").option("database", "test").option("collection", "test").load()
test.show()
데이터프레임 만들어서 insert해보기
insert_df = spark.createDataFrame([("11", "mongo-spark")],["id", "name"])
insert_df.write.format("mongo").option("database", "test").option("collection", "test").mode("append").save()
insert 잘 되었는지 확인
test = spark.read.format("mongo").option("database", "test").option("collection", "test").load()
test.show()
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!