Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lydia-ath/sparklinux

Assignment for Big Data course of MSc
https://github.com/lydia-ath/sparklinux

pycharm-community python-programming spark-sql

Last synced: 6 days ago
JSON representation

Assignment for Big Data course of MSc

Awesome Lists containing this project

README

        

# SparkLinux
Assignment for Big Data course of MSc

Εργαλεία που χρησιμοποιήσαμε:
Στην εργασία που εκπονήσαμε, αποφασίσαμε να χρησιμοποιήσουμε την python σαν γλώσσα
προγραμματισμού. Πιο συγκεκριμένα, μέσα στο Virtual Machine (VM) εγκαταστήσαμε το Pyspark και το
Pycharm. Το Pycharm το χρησιμοποιήσαμε ως IDE για την ανάπτυξη κώδικα σε δομημένη μορφή project.

Μεθοδολογία

Πρώτο ερώτημα:
Στο πρώτο ερώτημα αρχικά διαβάσαμε τους πίνακες από τα αρχεία και τους εμφανίσαμε στο command
prompt για να δούμε πως τους αναγνωρίζει και πως τους τυπώνει η Pyspark. Επειδή τα αρχεία περιείχαν το
delimeter σαν τρόπο διαχωρισμού των διαφορετικών πεδίων, για να τα διαβάσουμε σωστά χρησιμοποιήσαμε
την εντολή «spark.read.option("delimiter", "|").option("header", "true").option("inferSchema",
"true").csv("Fname.txt")». Στην συνέχεια κάναμε 2 διαδοχικά joins στους πίνακες, όπως φαίνεται και στον
κώδικα παρακάτω. Στη συνέχεια, δημιουργήσαμε έναν συνολικό κύβο(.cube) πάνω στους πίνακες αυτούς και
συγκεκριμένα πάνω στις διαστάσεις genre και gender, κάθε κελί του οποίου περιέχει την μέση βαθμολογία
(avg(rating)) των ταινιών κάθε κατηγορίας για το συγκεκριμένο συνδυασμό τιμών του Group by στο οποίο
ανήκει «df = usr_usrmvs.cube("genre", "gender").avg("rating").withColumnRenamed("avg(rating)",
"avgRating").sort("genre", "gender")». Τέλος, για κάθε Group By του κύβου δημιουργήσαμε ένα αρχείο
εξόδου με τα αποτελέσματα. Πιο συγκεκριμένα, αν υποθέσουμε ότι οι διαστάσεις του κύβου είναι (genre,
gender), (gender, -), (gender,-), (-) τότε τα output αρχεία είναι τα εξής: genre_gender.txt, genre_null.txt,
gender_null.txt, null_null.txt

Δεύτερο ερώτημα:
Στο δεύτερο ερώτημα αξιοποιήσαμε το διάβασμα των πινάκων και τον κύβο που δημιουργήθηκε στο πρώτο
ερώτημα και προχωρήσαμε σε queries και join πάνω στον υπάρχοντα κύβο. Πιο συγκεκριμένα,
προσπαθήσαμε να δημιουργήσουμε έναν πίνακα με τα εξής πεδία: genre, gender, avgrating κάνοντας ένα
select από τον αρχικό κύβο του πρώτου ερωτήματος. Αυτή η διαδικασία εφαρμόστηκε 2 φορές, μία για τις
γυναίκες και μια για τους άνδρες, μετονομάζοντας κάθε φορά το avgrating ως FavgRating και MavgRating
αντίστοιχα. Με την δημιουργία αυτών των δύο πινάκων μπορούμε πλέον να συγκρίνουμε τα FavgRating και
MavgRating για τις ίδιες κατηγορίες ταινιών ώστε να εμφανίσουμε μόνο τα αποτελέσματα εκείνα για τα οποία
ο μέσος όρος βαθμολογίας των γυναικών είναι μεγαλύτερος από τον μέσο όρο βαθμολογίας των ανδρών . Στο
ερώτημα αυτό αξιοποιήσαμε μεταξύ άλλων την χρήση των φίλτρων ώστε να μπορέσουμε να διαλέξουμε να
συγκρίνουμε συγκεκριμένα πεδία των πινάκων.

Bonus ερώτημα:
Σε αυτό το ερώτημα επιλέξαμε να δημιουργήσουμε ως γράφημα ένα Ηistogram στο οποίο παρουσιάζεται ο
αριθμός των αξιολογήσεων ανά βαθμό όλων των ταινιών της κατηγορίας “Comedy”. Η διαδικασία αυτή
πραγματοποιήθηκε χρησιμοποιώντας μια βιβλιοθήκη (plt) με την οποία δημιουργούμε το γράφημα θέτοντας
Range = 5 και θέτοντας τίτλο γραφήματος ('Graph for comedy'). Έπειτα, κάνουμε ένα select ώστε να
επιλέξουμε από τον πίνακα usermv_mvgenre μόνο τις ταινίες εκείνες που ανήκουν στην κατηγορία Comedy.
Τέλος, κάναμε ένα groupby πάνω στο rating και χρησιμοποιώντας την συνάρτηση count μετράμε τον αριθμό
αξιολογήσεων ανά βαθμό των ταινιών που ανήκουν στην κατηγορία Comedy.