Как отобразить три элемента разных типов в Spark Shell? - PullRequest
0 голосов
/ 28 октября 2018

После создания RDD из текстового файла мне нужно использовать .map для создания нового RDD типа [Int, String, String] ... каждый элемент, разделенный запятой.Я не понимаю, как определить СДР с тремя различными типами данных на запись ....

Пока у меня есть:

val abc1 = sc.textFile("hi.txt")
val abc2 = abc1.map(i => i.split(,))

1 Ответ

0 голосов
/ 28 октября 2018

Если я правильно понимаю ваш вопрос, вы читаете текстовый файл, чтобы создать RDD[String], где каждая строка представляет собой запись (строку) в файле.Однако эти записи содержат целочисленное значение, за которым следуют два строковых значения с разделителем-запятой.(Например, запись может быть чем-то вроде «5, строка1, строка2».)

У RDD действительно может быть только один тип записи.Кажется, что вы хотите получить тип, который является RDD[(Int, String, String)] - где тип RDD представляет собой кортеж из Int, String и String.(Кстати, это сокращение для RDD[Tuple3[Int, String, String]]. Если вы не знакомы с Scala кортежами, эта ссылка может помочь.)

Это правильно?

Если это так, map является подходящей операцией.Однако операция .split вернет Array[String], поэтому следующее приведёт к RDD[Array[String]] в качестве типа abc2.

val abc1 = sc.textFile("hi.txt")
val abc2 = abc1.map(_.split(","))

Кстати, использование подчеркивания, _, является сокращением для следующего:

val abc1 = sc.textFile("hi.txt")
val abc2 = abc1.map(s => s.split(","))

Чтобы получить требуемый тип, вы должны использоватьВыражение выглядит примерно так:

val abc1 = sc.textFile("hi.txt")
val abc2 = abc1.map {s =>

  // Split the string into tokens, delimited by a comma, put result in an array.
  val a = s.split(",")

  // Create a tuple of the expected values, converting the first value to an integer.
  (a(0).toInt, a(1), a(2))
}

Обратите внимание, что это предполагает, что у вас всегда есть три элемента, и что первым является целое число.Вы получите ошибки, если это не так (и вы, возможно, захотите добавить больше обработки ошибок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...