/ / Modo dinamico per leggere il file posizionale con Scala [chiuso] - scala, apache-spark

Modo dinamico di leggere il file posizionale con Scala [chiuso] - scala, apache-spark

Sono in grado di leggere il file di lunghezza posizionale / fisso con l'aiuto del seguente codice static.but ho bisogno di renderlo dinamico come- abbiamo bisogno di passare la posizione del file e il nome del file come parametro.

val positionalFileReading = spark.read.textFile(inputFilePath).rdd
.map(l => (l.substring(0, 3).trim(), l.substring(3, 13).trim(),
l.substring(13,18).trim(), l.substring(18,22).trim()))

Qualsiasi aiuto è molto apprezzato.

risposte:

1 per risposta № 1

Innanzitutto, ti consiglio di utilizzare un metodo per dividere la tua riga in diversi punti:

def splitAtLengths(row: String, lengths: List[Int], acc: List[String] = Nil): List[String] = lengths match {
case Nil => acc.reverse
case n :: ls =>
val (first, rest)  row.splitAt(n)
splitAtLengths(rest, ls, first :: acc)
}

Questo ti permetterà di fare splitAtLengths(l, List(3, 10, 5)).map(_.trim) per sostituire ciò che hai nel tuo map.

Ora, devi solo dare i parametri rilevanti alla tua funzione:

def positionalFileReading(inputFilePath: String, cellLengths: List[Int]) = spark.read.textFile(inputFilePath).rdd.
map(l => splitAtLengths(l, cellLengths).map(_.trim))