/ / Dynamiczny sposób odczytu pliku pozycyjnego za pomocą Scala [closed] - scala, apache-spark

Dynamiczny sposób na odczytanie pliku pozycyjnego za pomocą Scala [closed] - scala, apache-spark

Jestem w stanie odczytać plik o położeniu pozycyjnym / o ustalonej długości przy pomocy statycznego kodu podanego poniżej. Ale muszę go uczynić dynamicznym jak - musimy podać pozycję pliku i nazwy pliku jako parametru.

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()))

Każda pomoc jest wysoko ceniona.

Odpowiedzi:

1 dla odpowiedzi № 1

Po pierwsze, zalecam użycie metody dzielenia rzędu w kilku punktach:

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)
}

To pozwoli ci to zrobić splitAtLengths(l, List(3, 10, 5)).map(_.trim) aby wymienić to, co masz w swoim map.

Teraz wystarczy podać odpowiednie parametry do swojej funkcji:

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