Если я правильно понимаю ваш вопрос, вы читаете текстовый файл, чтобы создать 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))
}
Обратите внимание, что это предполагает, что у вас всегда есть три элемента, и что первым является целое число.Вы получите ошибки, если это не так (и вы, возможно, захотите добавить больше обработки ошибок).