{"id":19934745,"url":"https://github.com/lydia-ath/sparklinux","last_synced_at":"2025-07-07T02:36:14.035Z","repository":{"id":192227908,"uuid":"448396703","full_name":"lydia-ath/SparkLinux","owner":"lydia-ath","description":"Assignment for Big Data course of MSc","archived":false,"fork":false,"pushed_at":"2022-01-15T21:41:35.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-08T12:44:23.095Z","etag":null,"topics":["pycharm-community","python-programming","spark-sql"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lydia-ath.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-01-15T21:38:16.000Z","updated_at":"2024-02-03T21:59:24.000Z","dependencies_parsed_at":"2023-09-03T14:33:47.316Z","dependency_job_id":"c7d6846c-93fb-4bae-92cc-0b1c552ab0c3","html_url":"https://github.com/lydia-ath/SparkLinux","commit_stats":null,"previous_names":["lydia-ath/sparklinux"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lydia-ath/SparkLinux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lydia-ath%2FSparkLinux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lydia-ath%2FSparkLinux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lydia-ath%2FSparkLinux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lydia-ath%2FSparkLinux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lydia-ath","download_url":"https://codeload.github.com/lydia-ath/SparkLinux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lydia-ath%2FSparkLinux/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264002288,"owners_count":23542405,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pycharm-community","python-programming","spark-sql"],"created_at":"2024-11-12T23:17:47.953Z","updated_at":"2025-07-07T02:36:14.017Z","avatar_url":"https://github.com/lydia-ath.png","language":"Python","readme":"# SparkLinux\nAssignment for Big Data course of MSc\n\nΕργαλεία που χρησιμοποιήσαμε:\nΣτην εργασία που εκπονήσαμε, αποφασίσαμε να χρησιμοποιήσουμε την python σαν γλώσσα \nπρογραμματισμού. Πιο συγκεκριμένα, μέσα στο Virtual Machine (VM) εγκαταστήσαμε το Pyspark και το \nPycharm. Το Pycharm το χρησιμοποιήσαμε ως IDE για την ανάπτυξη κώδικα σε δομημένη μορφή project.\n\nΜεθοδολογία\n\nΠρώτο ερώτημα:\nΣτο πρώτο ερώτημα αρχικά διαβάσαμε τους πίνακες από τα αρχεία και τους εμφανίσαμε στο command\nprompt για να δούμε πως τους αναγνωρίζει και πως τους τυπώνει η Pyspark. Επειδή τα αρχεία περιείχαν το \ndelimeter σαν τρόπο διαχωρισμού των διαφορετικών πεδίων, για να τα διαβάσουμε σωστά χρησιμοποιήσαμε \nτην εντολή «spark.read.option(\"delimiter\", \"|\").option(\"header\", \"true\").option(\"inferSchema\", \n\"true\").csv(\"Fname.txt\")». Στην συνέχεια κάναμε 2 διαδοχικά joins στους πίνακες, όπως φαίνεται και στον \nκώδικα παρακάτω. Στη συνέχεια, δημιουργήσαμε έναν συνολικό κύβο(.cube) πάνω στους πίνακες αυτούς και\nσυγκεκριμένα πάνω στις διαστάσεις genre και gender, κάθε κελί του οποίου περιέχει την μέση βαθμολογία\n(avg(rating)) των ταινιών κάθε κατηγορίας για το συγκεκριμένο συνδυασμό τιμών του Group by στο οποίο \nανήκει «df = usr_usrmvs.cube(\"genre\", \"gender\").avg(\"rating\").withColumnRenamed(\"avg(rating)\", \n\"avgRating\").sort(\"genre\", \"gender\")». Τέλος, για κάθε Group By του κύβου δημιουργήσαμε ένα αρχείο \nεξόδου με τα αποτελέσματα. Πιο συγκεκριμένα, αν υποθέσουμε ότι οι διαστάσεις του κύβου είναι (genre, \ngender), (gender, -), (gender,-), (-) τότε τα output αρχεία είναι τα εξής: genre_gender.txt, genre_null.txt, \ngender_null.txt, null_null.txt\n\nΔεύτερο ερώτημα:\nΣτο δεύτερο ερώτημα αξιοποιήσαμε το διάβασμα των πινάκων και τον κύβο που δημιουργήθηκε στο πρώτο \nερώτημα και προχωρήσαμε σε queries και join πάνω στον υπάρχοντα κύβο. Πιο συγκεκριμένα, \nπροσπαθήσαμε να δημιουργήσουμε έναν πίνακα με τα εξής πεδία: genre, gender, avgrating κάνοντας ένα \nselect από τον αρχικό κύβο του πρώτου ερωτήματος. Αυτή η διαδικασία εφαρμόστηκε 2 φορές, μία για τις \nγυναίκες και μια για τους άνδρες, μετονομάζοντας κάθε φορά το avgrating ως FavgRating και MavgRating\nαντίστοιχα. Με την δημιουργία αυτών των δύο πινάκων μπορούμε πλέον να συγκρίνουμε τα FavgRating και \nMavgRating για τις ίδιες κατηγορίες ταινιών ώστε να εμφανίσουμε μόνο τα αποτελέσματα εκείνα για τα οποία \nο μέσος όρος βαθμολογίας των γυναικών είναι μεγαλύτερος από τον μέσο όρο βαθμολογίας των ανδρών . Στο \nερώτημα αυτό αξιοποιήσαμε μεταξύ άλλων την χρήση των φίλτρων ώστε να μπορέσουμε να διαλέξουμε να \nσυγκρίνουμε συγκεκριμένα πεδία των πινάκων.\n\nBonus ερώτημα:\nΣε αυτό το ερώτημα επιλέξαμε να δημιουργήσουμε ως γράφημα ένα Ηistogram στο οποίο παρουσιάζεται ο \nαριθμός των αξιολογήσεων ανά βαθμό όλων των ταινιών της κατηγορίας “Comedy”. Η διαδικασία αυτή \nπραγματοποιήθηκε χρησιμοποιώντας μια βιβλιοθήκη (plt) με την οποία δημιουργούμε το γράφημα θέτοντας \nRange = 5 και θέτοντας τίτλο γραφήματος ('Graph for comedy'). Έπειτα, κάνουμε ένα select ώστε να \nεπιλέξουμε από τον πίνακα usermv_mvgenre μόνο τις ταινίες εκείνες που ανήκουν στην κατηγορία Comedy. \nΤέλος, κάναμε ένα groupby πάνω στο rating και χρησιμοποιώντας την συνάρτηση count μετράμε τον αριθμό \nαξιολογήσεων ανά βαθμό των ταινιών που ανήκουν στην κατηγορία Comedy. \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flydia-ath%2Fsparklinux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flydia-ath%2Fsparklinux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flydia-ath%2Fsparklinux/lists"}