IEP/K2 Septembar 1 2025

Izvor: SI Wiki
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);
            }