ИЕП/К2 Септембар 1 2025

Извор: SI Wiki
< ИЕП
Датум измене: 23. мај 2026. у 15:33; аутор: Bambula (разговор | доприноси) (→‎Решење)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу
Овај рок није решен. Помозите 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);
            }