[Risolto][Hadoop - Scala] Annidare una tupla all'interno di una funzione map?

di il
1 risposte

[Risolto][Hadoop - Scala] Annidare una tupla all'interno di una funzione map?

Buiongiorno a tutti.

Recentemente, ho cominciato a specializzarmi, e lavorare su tecnologie Big Data. In particolare devo realizzare un algoritmo di ordinamento in scala su un dataset estratto da Hadoop.

Bencjè l'estrazione dei dati da hadoop funzioni correttamente, ho qualche problema a capire come completare l'ordinamento.

Ho importato, all'interno dela spark-shell i miei dati.

Questi dati sono in formato array di stringhe, dove ogni stringa ha questo formato:
1,DE000HV4DTA1,NEXI S.p.A.,13.095,15.0,16.1,11.9,14.55,0.11,0.11,2020-12-17 00:00:00.0,2020-04-24 17:52:03.0,G-237---O-5689---M-341340,Call
Dispongo in partica di un dataset (che chiamerò RDD = Resilient Distributed Dataset).

Questo RDD è, come detto poco sopra un array di stringhe dove, ogni elemento di tale array è una stringa simile a quella postata sopra, ovvero composta dal medesimo numero di campi, tutti divisi da un carattere virgola ma, ovviamente cambiano i dati delle stringhe.

A questo punto vorrei realizzare in scala una funzione che crei una tupla, fatta in questo modo:

("DE000HV4DTA1",20201217), e così via con tutte le stringhe seguenti parte del medesimo array.

Le funzioni che si occupano di estrarre i dati e formattarmi correttamente le ho:
ListaCW.first.split(",")(1).toString
Questa estrae il codice ISIN della prima riga, e lo converte in Stringa.
ListaCW.first.split(",")(10).split(" ")(0).replace("-","").toInt
Questa invece estrae dall'array la "data di scadenza", che è questo parametro: 2020-12-17 00:00:00.0 e lo converte in un intero nel formato che voglio io, cioè: 20201217

Ciò che vorrei realizzare ora è una "map", ovvero una funzione che legge l'intero RDD, cioè l'intero array entrante (sono piu di 450 record nell'array), e genera una tupla del tipo: ("DE000HV4DTA1",20201217) associando isin a data di scadenza, nel formato chiave, valore

Ho provato in questo modo:
scala> val AssociazioneISIN = ListaCW.map(DataScadenza => {
     | val Chiave = ListaCW.map(ListaCW.split(",")(10).split(" ")(0).replace("-","").toInt)
     | val Valore = ListaCW.map(ListaCW.split(",")(1).toString)
     | (Chiave -> Valore)
     | })
Ma ottengo errore:
<console>:26: error: value split is not a member of org.apache.spark.rdd.RDD[String]
       val Chiave = ListaCW.map(ListaCW.split(",")(10).split(" ")(0).replace("-","").toInt)
Ora, a parte l'errore in se che è poco parlante, il mio problema è che non ho compreso la corretta sintassi per far generare una tupla ad una funzione "map" di scala.

Qualcuno mi potrebbe aiutare, per favore?

Grazie mille

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte