Какой самый функциональный способ заполнить многомерный массив из текстового файла? - PullRequest
0 голосов
/ 25 августа 2018

У меня есть textfile:

0.1  0.0
0.2  0.1
0.3  0.0
0.0  0.4

И я хочу заполнить 2-dimension array этим.

Требуемый результат будет выглядеть так:

RDD(Array(Array(0.1, 0.0), Array(0.2, 0.1), Array(0.3, 0.0), Array(0.0, 0.4)))

Зная, что в spark, textfile читается в строке, какой будет самый функциональный способ его заполнения?

Я пробовал несколько способов, но каждый раз оказывался:

RDD (Array(Array(0.1, 0.0)
     Array(Array(0.2, 0.1)
     Array(Array(0.3, 0.0)
     Array(Array(0.0, 0.4))

Я думаю об использовании чего-то вроде foldLeft, но я думаю, что должен быть более простой способ. Я не прав?

Что я пробовал:

val V = sc.textFile("file.txt")
          .map(_.split(" ")
                .map(x=> Array(x.toDouble))
                .grouped(2)
                .map(_.flatten).toArray)

1 Ответ

0 голосов
/ 25 августа 2018

Вы можете получить выгоду, используя wholeTextFiles

val V = sc.wholeTextFiles("file.txt")
  .map(_._2.split("\n")
    .map(_.split(" ")
      .map(_.trim.toDouble)))

, который должен дать вам желаемый результат как

//V: org.apache.spark.rdd.RDD[Array[Array[Double]]]

и , если у вас есть несколько пробелов в серединедвойных чисел , тогда вы можете использовать \\s+ как

val V = sc.wholeTextFiles("file.txt")
  .map(_._2.split("\n")
    .map(_.split("\\s+")
      .map(_.trim.toDouble)))

Надеюсь, ответ будет полезным

...