ИЕП/К2 Септембар 1 2025 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
(Нова страница: {{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);
            }