Shell Script 48시간 → Hive 4분

초기 계획)

데이터 셋을 연, 월로 분할하여 원활한 분석을 가능하게 하자!

<aside> 💡 1. EC2에 위치한 데이터 셋을 연,월 분리 (쉘 스크립트 사용) 2. 분리된 데이터 묶음을 HDFS 올리고 spark에서 사용

</aside>

Kaggle에 있는 NYC Taxi Fare Data의 구조는 다음과 같다

Untitled

Shell Script를 통해 연도 별로 폴더를 나누고, 같은 달끼리 분류해서 저장하는 쉘 스크립트를 작성하였다. 먼저 용량이 작은 Test데이터 셋으로 실험을 해 보았다.

#!/bin/bash
mkdir data #Data 폴더 생성
cd data #진입
for var in {2009..2015} #09년 부터 15년까지 리스트 생성
do
        mkdir $var #각 년도마다 폴더 생성
        cd $var
        for var2 in {01..12} #1월~12월까지 리스트 생성
        do
                mkdir $var2 #개월마다 폴더 생성
                cd $var2
                cd ..
        done
        cd ..
done
cat /home/ubuntu/dataset/train.csv | while read line # 데이터셋 로드 후 line으로 한 줄 씩 읽어옴
do

        year=`echo $line | awk '{print $1}'` 
        year_temp=`echo $line | awk -F "-" '{print $1}'`
        month_temp=`echo $line | awk -F "-" '{print $2}'`
        if [ "$year_temp" -eq 2009 ]
        then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
        elif [ "$year_temp" -eq 2010 ]
        then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
	elif [ "$year_temp" -eq 2011 ]
        then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
	elif [ "$year_temp" -eq 2012 ]
	then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
        elif [ "$year_temp" -eq 2013 ]
	then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
        elif [ "$year_temp" -eq 2014 ]
	then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
        elif [ "$year_temp" -eq 2015 ]
	then echo $line >> /home/ubuntu/test/data/$year_temp/$month_temp/$month_temp.csv
        else echo $line >> /home/ubuntu/test/data/else_result.csv
        fi
done

결과)

Untitled

Untitled

Untitled

Untitled

                                     (정상적으로 분류가 되는 것을 확인할 수 있다.)