IEP/K2 Septembar 1 2025
< ИЕП
Pređi na navigaciju
Pređi na pretragu
- Ovaj rok nije rešen. Pomozite SI Wiki tako što ćete ga rešiti.
Drugi kolokvijum u roku septembar 1 2025 održan je 11. septembra. Na kolokvijumu su bili dostupni Spark dokumentacija, prezentacija sa predavanja, virtuelna mašina korišćena na predavanju i dva tekstualna fajla kao primeri unosa (bez očekivanog ispisa ili primera parametara). Trajao je 60 minuta.
Postavka
Posmatra se evidencija o osobama angažovanim na filmovima. Podaci o osobama su dati u obliku: nconst (string), primaryName, birthYear, deathYear, primaryProfession (array of strings), knownForTitles (array of tconsts)
- U programskom jeziku Java sastaviti Map/Reduce program koristeći Spark koji vraća podatke o filmu po kome je najviše osoba poznato. Ako ima više filmova sa tim maksimalnim brojem vratiti podatke za sve te filmove. Podaci o filmu treba da sadrže šifru filma (tconsts) i niz osoba koje su poznate po tom filmu (array of nconst). Voditi računa o konkurentnosti.
Odgovor se predaje u vidu dva Java datoteke (FilmsMaxKnownFor.java).
Rešenje
JavaPairRDD<String,List<String>>filmOsobe=sc.textFile(fileName)
.flatMapToPair(line->{
List<Tuple2<String,List<String>>>out=new LinkedList<>();
String[]p=line.split("\t");
if (p.length < 6 || p[5].equals("\\N")) return out.iterator();
String osoba=p[0];
String[]filmovi=p[5].split(",");
for(String film:filmovi) {
List<String>jedna=new ArrayList<>();
jedna.add(osoba);
out.add(new Tuple2<>(film,jedna));
}
return out.iterator();
})
.reduceByKey((a,b)->{
List<String>spojeno=new ArrayList<>(a);
spojeno.addAll(b);
return spojeno;
})
.cache();
int max=filmOsobe.map(t->t._2.size()).reduce(Math::max);
List<Tuple2<String,List<String>>>rezultat=filmOsobe
.filter(t->t._2.size()==max)
.collect();
System.out.println("Max broj osoba: " + max);
for (Tuple2<String, List<String>> film : rezultat) {
System.out.println("Film: " + film._1 + " | Osobe: " + film._2);
}