ИЕП/К2 Септембар 1 2025 — разлика између измена
< ИЕП
Пређи на навигацију
Пређи на претрагу
(Нова страница: {{tocright}} {{нерешено}} '''Други колоквијум у року септембар 1 2025''' одржан је 11. септембра. На колоквијуму су били доступни ''Spark'' документација, презентација са предавања, виртуелна машина коришћена на предавању и два текстуална фајла као примери уноса (без очеки…) |
(→Решење) |
||
| Ред 14: | Ред 14: | ||
[[Категорија:ИЕП]] | [[Категорија:ИЕП]] | ||
[[Категорија:Рокови]] | [[Категорија:Рокови]] | ||
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); | |||
} | |||
Тренутна верзија на датум 23. мај 2026. у 15:33
- Овај рок није решен. Помозите 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);
}