2015-07-09 3 views
1

Я новичок в Scala (и Spark). Я пытаюсь читать в csv-файле и извлекать из данных несколько произвольных столбцов. Следующая функция делает это, но с индексами жестко закодированные столбцов:Выбор нескольких произвольных столбцов из массива Scala с использованием map()

def readCSV(filename: String, sc: SparkContext): RDD[String] = { 
    val input = sc.textFile(filename).map(line => line.split(",")) 
    val out = input.map(csv => csv(2)+","+csv(4)+","+csv(15)) 
    return out 
} 

Есть ли способ, чтобы использовать карту с произвольным числом индексов столбцов, переданных функции в массиве?

ответ

2

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

scala> val m = List(List(1,2,3), List(4,5,6)) 
m: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6)) 

scala> val indices = List(0,2) 
indices: List[Int] = List(0, 2) 

// For each inner sequence, get the relevant values 
// indices.map(inner) is the same as indices.map(i => inner(i)) 
scala> m.map(inner => indices.map(inner)) 
res1: List[List[Int]] = List(List(1, 3), List(4, 6)) 

// If you want to join all of them use .mkString 
scala> m.map(inner => indices.map(inner).mkString(",")) 
res2: List[String] = List(1,3, 4,6) // that's actually a List containing 2 String 
Смежные вопросы