Skip to content

Latest commit

 

History

History
45 lines (40 loc) · 5.22 KB

README.md

File metadata and controls

45 lines (40 loc) · 5.22 KB

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.