Skip to content

Commit 5c7d90c

Browse files
committed
report q3
1 parent 80ee140 commit 5c7d90c

File tree

5 files changed

+127
-51
lines changed

5 files changed

+127
-51
lines changed

el18604.pdf

39.3 KB
Binary file not shown.

el18604.tex

+27-2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@
1313
\usepackage{wrapfig}
1414
\usepackage[]{hyperref}
1515
\usepackage{verbatim}
16+
\usepackage{listings}
17+
18+
19+
20+
\makeatletter
21+
\newread\file@read
22+
\newcommand{\readfirstline}[1]{%
23+
\openin\file@read=#1\relax
24+
\read\file@read to\@tempa
25+
\closein\file@read
26+
\@tempa
27+
}
28+
\makeatother
29+
1630

1731
\begin{document}
1832

@@ -51,14 +65,25 @@ \section*{Ζητούμενο 2}
5165
\item \texten{LON} : \texten{double} $\rightarrow$ \texten{double}
5266
\end{itemize}
5367
\par Επίσης, στο αρχειο \texten{IncomeData2015.csv} η στήλη \texten{"Estimated Median Income"} έχει τύπο \texten{string} της μορφής: "\$\texten{number}", οπότε αφαιρέθηκε το '\$' και έγινε μετατροπή σε \texten{integer}.
54-
\par Τέλος, ενώθηκαν τα \texten{DataFrame} που περιέχουν τα δεδομένα καταγραφής εγκλημάτων για το \texten{Los Angeles} από το 2010 μέχρι το 2019 και από το 2020 μέχρι σήμερα, τα δεδομένα με \texten{reverse geocoding} πληροφορία και τα δεδομένα σχετικά με το μέσο εισόδημα ανά νοικοκυριό και ταχυδρομικό κώδικα δημιουργώντας ένα νέο \texten{DataFrame}, το οποίο αποθηκέυτηκε, με την εξής μορφή:
68+
\par Τέλος, ενώθηκαν τα \texten{DataFrame} που περιέχουν τα δεδομένα καταγραφής εγκλημάτων για το \texten{Los Angeles} από το 2010 μέχρι το 2019 και από το 2020 μέχρι σήμερα, τα δεδομένα με \texten{reverse geocoding} πληροφορία και τα δεδομένα σχετικά με το μέσο εισόδημα ανά νοικοκυριό και ταχυδρομικό κώδικα δημιουργώντας ένα νέο \texten{DataFrame}, το οποίο στην συνέχεια αποθηκέυτηκε.
69+
\newpage Ο συνολικός αριθμός γραμμών και ο τύπος κάθε στήλής φαίνονται παρακάτω:
5570
\texten{\verbatiminput{outputs/ConfigData.txt}}
5671

5772
\section*{Ζητούμενο 3}
58-
73+
Το \texten{Query 1} υλοποιήθηκε χρησιμοποιώντας τα \texten{DataFrame} και \texten{SQL API} με 4 \texten{Spark Executors}. Οι δύο υλοποιήσεις βρίσκονται σε δύο διαφορετικά αρχεία και προφανώς δίνουν το ίδιο αποτέλεσμα αλλα σε διαφορετικούς χρόνους εκτέλεσης\footnote[1]{Να σημειωθεί ότι οι χρόνοι εκτέλεσεις αφορούν αποκλειστικά την διάρκεια εκτέλεσεις των ερωτημάτων και δεν προσμετράται το φόρτωμα και η εκτύπωση των στοιχείων}. Γεγονός ελαφρώς αναμενόμενο αφού η βιβλιογραφία αναφέρει ότι το \texten{DataFrame API} έχει καλύτερη επίδοση για πιο περίπλοκα ερωτήματα. Σε κάθε περίπτωση,όμως, οι χρόνοι εκτέλεσης δεν διαφέρουν πολύ, καθώς και τα δύο \texten{APIs} χρησιμοποιούν το ίδιο \texten{execution plan} και το ίδιο \texten{query optimizer}. Συνεπώς, παίζει ρόλο και η εξοικείωση του προγραμματιστή με το κάθε \texten{API},σημείο που υπερτερεί το \texten{DataFrame API} διότι προσφέρει μεγαλύτερη ευκολία και έλεγχο στον προγραμματιστή.
74+
Οι χρόνοι εκτέλεσης και τα αποτελέσματα φαίνονται παρακάτω: \break \break
75+
\texten{\texttt{\readfirstline{outputs/Query1DF.txt}}}
76+
\texten{\verbatiminput{outputs/Query1SQL.txt}}
5977

6078
\section*{Ζητούμενο 4}
79+
Αντίστοιχα με παραπάνω το \texten{Query 2} υλοποιήθηκε χρησιμοποιώντας τα \texten{DataFrame}, \texten{SQL} και \texten{RDD API} με 4 \texten{Spark Executors}. Οι τρεις υλοποιήσεις βρίσκονται σε τρία διαφορετικά αρχεία. Παρατηρούμε ότι ο χρόνος εκτέλεσης του \texten{RDD API} είναι πολύ μεγαλύτερος από τους άλλους δύο. Αυτό οφείλεται στο γεγονός ότι το \texten{RDD API} είναι πιο χαμηλού επιπέδου και απαιτεί περισσότερη "χειρωνακτική" επεξεργασία από τον προγραμματιστή. Αντίθετα, το \texten{DataFrame API} και το \texten{SQL API} προσφέρουν υψηλότερου επιπέδου εργαλεία και εκτελούν μια σειρά από βελτιστοποιήσεις στον κώδικα προτού εκτελεστούν, δίνοντας έτσι την βέλτιστη δομή σε αυτόν. Ακόμα, από την στιγμή που θέλουμε να παραλληλοποιήσομε την εκτέλεση του ερωτήματος(\texten{4 Spark Executors}), η καταλληλότερη δομή είναι το \texten{DataFrame API} αφού είναι πολύ αποδοτικό στην διαχείριση πόρων.Οι χρόνοι εκτέλεσης και τα αποτελέσματα φαίνονται παρακάτω: \break \break
80+
\texten{\texttt{\readfirstline{outputs/Query2DF.txt}}} \break
81+
\texten{\texttt{\readfirstline{outputs/Query2SQL.txt}}}
82+
\texten{\verbatiminput{outputs/Query2RDD.txt}}
6183

84+
\section*{Ζητούμενο 5}
85+
Το \texten{Query 3} υλοποιήθηκε χρησιμοποιώντας τα \texten{DataFrame} και \texten{SQL API} με 2,3 και \texten{Spark Executors}. Οι χρόνοι εκτέλεσης και τα αποτελέσματα φαίνονται παρακάτω: \break \break
86+
\texten{\texttt{\readlines{outputs/Query3DF.txt}{6}}} \break
6287

6388

6489
\end{document}

outputs/Query1DF.txt

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
Query 1 Dataframe Execution Time: 0.0834348201751709
2+
3+
===== Query 1 Dataframe Result =====
4+
+----+-----+-----+----+
5+
|Year|Month|count|Rank|
6+
+----+-----+-----+----+
7+
|2010|1 |19517|1 |
8+
|2010|3 |18131|2 |
9+
|2010|7 |17856|3 |
10+
|2011|1 |18138|1 |
11+
|2011|7 |17283|2 |
12+
|2011|10 |17034|3 |
13+
|2012|1 |17946|1 |
14+
|2012|8 |17661|2 |
15+
|2012|5 |17502|3 |
16+
|2013|8 |17441|1 |
17+
|2013|1 |16822|2 |
18+
|2013|7 |16644|3 |
19+
|2014|10 |17329|1 |
20+
|2014|7 |17258|2 |
21+
|2014|12 |17198|3 |
22+
|2015|10 |19220|1 |
23+
|2015|8 |19011|2 |
24+
|2015|7 |18709|3 |
25+
|2016|10 |19659|1 |
26+
|2016|8 |19491|2 |
27+
|2016|7 |19448|3 |
28+
|2017|10 |20433|1 |
29+
|2017|7 |20193|2 |
30+
|2017|1 |19835|3 |
31+
|2018|5 |19974|1 |
32+
|2018|7 |19876|2 |
33+
|2018|8 |19762|3 |
34+
|2019|7 |19123|1 |
35+
|2019|8 |18980|2 |
36+
|2019|3 |18859|3 |
37+
|2020|1 |18510|1 |
38+
|2020|2 |17257|2 |
39+
|2020|5 |17211|3 |
40+
|2021|10 |19311|1 |
41+
|2021|7 |18663|2 |
42+
|2021|8 |18379|3 |
43+
|2022|5 |20428|1 |
44+
|2022|10 |20285|2 |
45+
|2022|6 |20221|3 |
46+
|2023|8 |19842|1 |
47+
|2023|1 |19789|2 |
48+
|2023|7 |19777|3 |
49+
|2024|1 |6709 |1 |
50+
+----+-----+-----+----+
51+

outputs/Query1SQL.txt

+48-48
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
1-
Query 1 SQL Execution Time: 0.12349104881286621
1+
Query 1 SQL Execution Time: 0.11646175384521484
22

33
===== Query 1 SQL Result =====
4-
+----+-----+----------+
5-
|Year|Month|CrimeCount|
6-
+----+-----+----------+
7-
|2010|1 |19517 |
8-
|2010|3 |18131 |
9-
|2010|7 |17856 |
10-
|2011|1 |18138 |
11-
|2011|7 |17283 |
12-
|2011|10 |17034 |
13-
|2012|1 |17946 |
14-
|2012|8 |17661 |
15-
|2012|5 |17502 |
16-
|2013|8 |17441 |
17-
|2013|1 |16822 |
18-
|2013|7 |16644 |
19-
|2014|10 |17329 |
20-
|2014|7 |17258 |
21-
|2014|12 |17198 |
22-
|2015|10 |19220 |
23-
|2015|8 |19011 |
24-
|2015|7 |18709 |
25-
|2016|10 |19659 |
26-
|2016|8 |19491 |
27-
|2016|7 |19448 |
28-
|2017|10 |20433 |
29-
|2017|7 |20193 |
30-
|2017|1 |19835 |
31-
|2018|5 |19974 |
32-
|2018|7 |19876 |
33-
|2018|8 |19762 |
34-
|2019|7 |19123 |
35-
|2019|8 |18980 |
36-
|2019|3 |18859 |
37-
|2020|1 |18510 |
38-
|2020|2 |17257 |
39-
|2020|5 |17211 |
40-
|2021|10 |19311 |
41-
|2021|7 |18663 |
42-
|2021|8 |18379 |
43-
|2022|5 |20428 |
44-
|2022|10 |20285 |
45-
|2022|6 |20221 |
46-
|2023|8 |19842 |
47-
|2023|1 |19789 |
48-
|2023|7 |19777 |
49-
|2024|1 |6709 |
50-
+----+-----+----------+
4+
+----+-----+----------+----+
5+
|Year|Month|CrimeCount|Rank|
6+
+----+-----+----------+----+
7+
|2010|1 |19517 |1 |
8+
|2010|3 |18131 |2 |
9+
|2010|7 |17856 |3 |
10+
|2011|1 |18138 |1 |
11+
|2011|7 |17283 |2 |
12+
|2011|10 |17034 |3 |
13+
|2012|1 |17946 |1 |
14+
|2012|8 |17661 |2 |
15+
|2012|5 |17502 |3 |
16+
|2013|8 |17441 |1 |
17+
|2013|1 |16822 |2 |
18+
|2013|7 |16644 |3 |
19+
|2014|10 |17329 |1 |
20+
|2014|7 |17258 |2 |
21+
|2014|12 |17198 |3 |
22+
|2015|10 |19220 |1 |
23+
|2015|8 |19011 |2 |
24+
|2015|7 |18709 |3 |
25+
|2016|10 |19659 |1 |
26+
|2016|8 |19491 |2 |
27+
|2016|7 |19448 |3 |
28+
|2017|10 |20433 |1 |
29+
|2017|7 |20193 |2 |
30+
|2017|1 |19835 |3 |
31+
|2018|5 |19974 |1 |
32+
|2018|7 |19876 |2 |
33+
|2018|8 |19762 |3 |
34+
|2019|7 |19123 |1 |
35+
|2019|8 |18980 |2 |
36+
|2019|3 |18859 |3 |
37+
|2020|1 |18510 |1 |
38+
|2020|2 |17257 |2 |
39+
|2020|5 |17211 |3 |
40+
|2021|10 |19311 |1 |
41+
|2021|7 |18663 |2 |
42+
|2021|8 |18379 |3 |
43+
|2022|5 |20428 |1 |
44+
|2022|10 |20285 |2 |
45+
|2022|6 |20221 |3 |
46+
|2023|8 |19842 |1 |
47+
|2023|1 |19789 |2 |
48+
|2023|7 |19777 |3 |
49+
|2024|1 |6709 |1 |
50+
+----+-----+----------+----+
5151

q1_sql.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
# Filter the top 3 months for each year
3232
ResultSQL = """
33-
SELECT Year, Month, CrimeCount
33+
SELECT Year, Month, CrimeCount, Rank
3434
FROM ({}) Top3Months
3535
WHERE Rank <= 3
3636
ORDER BY Year, Rank

0 commit comments

Comments
 (0)