ИЕП/К2 Септембар 1 2025
< ИЕП
Пређи на навигацију
Пређи на претрагу
- Овај рок није решен. Помозите SI Wiki тако што ћете га решити.
Други колоквијум у року септембар 1 2025 одржан је 11. септембра. На колоквијуму су били доступни Spark документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очекиваног исписа или примера параметара). Трајао је 60 минута.
Поставка
Посматра се евиденција о особама ангажованим на филмовима. Подаци о особама су дати у облику: nconst (string), primaryName, birthYear, deathYear, primaryProfession (array of strings), knownForTitles (array of tconsts)
- У програмском језику Јава саставити Map/Reduce програм користећи Spark који враћа податке о филму по коме је највише особа познато. Ако има више филмова са тим максималним бројем вратити податке за све те филмове. Подаци о филму треба да садрже шифру филма (tconsts) и низ особа које су познате по том филму (array of nconst). Водити рачуна о конкурентности.
Одговор се предаје у виду два Јава датотеке (FilmsMaxKnownFor.java).
Решење
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);
}