Получить диапазон столбцов Spark RDD

Теперь у меня в RDD более 300 столбцов, но я обнаружил, что необходимо динамически выбирать диапазон столбцов и помещать их в тип данных LabledPoints. Как новичок в Spark, мне интересно, есть ли какой-либо индексный способ выбрать диапазон столбцов в RDD. Что-то вроде temp_data = data[, 101:211] в R. Есть что-то вроде val temp_data = data.filter(_.column_index in range(101:211)...?

Любая мысль приветствуется и ценится.


person Richard Liu    schedule 24.07.2015    source источник
comment
Должен ли это быть RDD или это может быть DataFrame?   -  person Justin Pihony    schedule 24.07.2015
comment
С моими ограниченными знаниями, dataframe должен быть хорошим. У вас есть решение, если оно находится в кадре данных?   -  person Richard Liu    schedule 24.07.2015


Ответы (3)


Если это DataFrame, то должно работать что-то вроде этого:

val df = rdd.toDF
df.select(df.columns.slice(101,211) : _*)
person Justin Pihony    schedule 24.07.2015
comment
Привет Джастин, у меня это не сработало val df = sqlcontext.read .format(com.databricks.spark.csv) .option(header, true) // Использовать первую строку всех файлов в качестве заголовка .option(inferSchema, true)/ / Автоматически определять типы данных df.select (df.columns.slice (0,190): _ *) - person sri hari kali charan Tummala; 25.12.2015
comment
@sriharikalicharanTummala, что случилось? - person Justin Pihony; 25.12.2015
comment
Я также сталкиваюсь с ошибкой, когда пытаюсь. Вот сообщение: scala› val df2 = df.select(df.columns.slice(0,2): _) ‹console›:21: ошибка: перегружено значение метода select с альтернативами: (col: String, cols: String)org.apache.spark.sql.DataFrame ‹and› (cols: org.apache.spark.sql.Column*)org.apache.spark.sql.DataFrame не может быть применен к (String) val df2 = df.select(df.columns.slice(0,2): _*) Любая идея? Я использую Spark 1.5 как отдельное приложение. - person Guillaume; 10.01.2016

Предполагая, что у вас есть RDD Array или любая другая коллекция scala (например, List). Вы можете сделать что-то вроде этого:

val data: RDD[Array[Int]] = sc.parallelize(Array(Array(1,2,3), Array(4,5,6)))
val sliced: RDD[Array[Int]] = data.map(_.slice(0,2))

sliced.collect()
> Array[Array[Int]] = Array(Array(1, 2), Array(4, 5))
person marios    schedule 24.07.2015

Вид старой темы, но недавно мне пришлось сделать что-то подобное и поискать. Мне нужно было выбрать все, кроме последнего столбца, где у меня было более 200 столбцов.

Искра 1.4.1
Скала 2.10.4

val df = hiveContext.sql("SELECT * FROM foobar")
val cols = df.columns.slice(0, df.columns.length - 1)
val new_df = df.select(cols.head, cols.tail:_*)
person ForRealHomie    schedule 23.09.2016