Laboratorio Tecnologie Cloud e Mobile

<Luca Parimbelli - 1053142>
<Luca Ghislotti - 1052975>
<Alessandro Mazzola - 1053121>
<Andrea Marinò - 1053230>
<Christian Spano - 1053028>

Caricamento dati e descrizione dei dataset

Job PySpark (watch_next_dataset.csv)

Aggiunta del dataset "watch_next_dataset" fornito

# ADD IDX OF WATCH NEXT VIDEOS
watch_next_dataset_agg = watch_next_dataset /
		.groupBy(col("idx").alias("idx_ref")) /
		.agg(collect_list("url") /
        	.alias("watch_next_url")) /
watch_next_dataset_agg.printSchema()

tedx_dataset_agg = tedx_dataset /
		.join(watch_next_dataset_agg, tedx_dataset.idx == watch_next_dataset_agg.idx_ref, "left") /
		.drop("idx_ref").select(col("idx").alias("_id"), col("*")).drop("idx") /
tedx_dataset_agg.printSchema()

# ADD INFO ABOUT SPEAKER
tedx_dataset_agg = tedx_dataset_agg /
	.join(speaker_info_dataset, tedx_dataset_agg.main_speaker == speaker_info_dataset.name_speaker, "left") /
        .select(col("*"), struct(col("name_speaker") /
        .alias("speaker_name"), col("speaker_link") /
        .alias("speaker_url"), col("profession") /
        .alias("speaker_profession"), col("info_about") /
        .alias("info")).alias("speaker")).drop("name_speaker") /
tedx_dataset_agg.printSchema()

Dataset aggiuntivo

Questo è il dataset che abbiamo aggiunto per ampliare quelli già a disposizione. Questo ci permette di implementare la funzione di preview dei dati dello speaker (con le risorse/competenze attuali) decisa nella fase di analisi del progetto.

# ADD IDX OF WATCH NEXT VIDEOS
watch_next_dataset_agg = watch_next_dataset /
		.groupBy(col("idx").alias("idx_ref")) /
		.agg(collect_list("url") /
        	.alias("watch_next_url")) /
watch_next_dataset_agg.printSchema()

tedx_dataset_agg = tedx_dataset /
		.join(watch_next_dataset_agg, tedx_dataset.idx == watch_next_dataset_agg.idx_ref, "left") /
		.drop("idx_ref").select(col("idx").alias("_id"), col("*")).drop("idx") /
tedx_dataset_agg.printSchema()

# ADD INFO ABOUT SPEAKER
tedx_dataset_agg = tedx_dataset_agg /
	.join(speaker_info_dataset, tedx_dataset_agg.main_speaker == speaker_info_dataset.name_speaker, "left") /
        .select(col("*"), struct(col("name_speaker") /
        .alias("speaker_name"), col("speaker_link") / 
        .alias("speaker_url"), col("profession") /
        .alias("speaker_profession"), col("info_about") /
        .alias("info")).alias("speaker")).drop("name_speaker") /
tedx_dataset_agg.printSchema()

Job PySpark (info_speaker.csv)

Abbiamo dapprima creato un dataset contenente un elenco di speaker presenti nei vari talk. Dopodiché abbiamo fatto la join con il "vecchio" dataset. Abbiamo così ottenuto tutte le informazioni raggruppate per TED talk.

Dataset completo in MongoDB

Criticità tecniche

  • Durata submit job ed esecuzione elevata (reactivness in fase di developing)

  • Presenza di duplicati all'interno del dataset. Abbiamo provato ad utilizzare le funzioni "dropDuplicates()" e "distinct()": l'esecuzione del processo AWS Glue avviene con successo, ma la modifica non viene apportata sui dati nel database (update: la funzione dropDuplicates() effettivamente ha risolto il problema    )

watch_next_dataset_path = "s3://tedindex-data/watch_next_dataset.csv"
watch_next_dataset = spark.read.option("header","true").csv(watch_next_dataset_path).dropDuplicates()
watch_next_dataset.printSchema()

Dataset corretto in MongoDB

Possibili evoluzioni

  • Ampliamento del dataset (ad es. utilizzando DBpedia)

  • Utilizzo di API per gestire il processo di data retrieval e scraping

  • Inserire il nuovo dataset ("info_speaker") in MongoDB come struttura

TEDindeX: data load and system setup

By Luca Ghislotti

TEDindeX: data load and system setup

2020 mobile and cloud technologies project

  • 203