Если вы в конечном счете пытаетесь отфильтровать искровой DataFrame по списку уникальных значений, вы можете сделать это с помощью операции merge
. Если вы говорите о переходе от длинного к широкому формату данных, вам необходимо убедиться, что существует такое же количество наблюдений для каждого «уровня» факторной переменной, которую вы рассматриваете. Если вы хотите подмножать строку данных Spark по столбцам, вы также можете использовать оператор select или создать инструкцию select, вставив данные $ blah в, а затем введите eval(parse(text=bigTextObject))
в качестве предложенного @Wannes. Возможно, функция, которая генерирует большой оператор select
, - это то, что вы хотите (если вы фильтруете по имени столбца) ... merge
- это то, что вы хотите, если пытаетесь извлечь значения из одного столбца.
Из того, что я понимаю, кажется, что вы хотите взять большой Spark DataFrame с большим количеством столбцов и принимать только те, которые вас интересуют, как указано list
в вашем вопросе.
Вот небольшая функция для создания искры select
заявление:
list<- c(1,2,5,8,90,200)
listWithDataPrePended<- paste0('data', '$', list)
gettingCloser<- noquote(paste0(listWithDataPrePended, collapse = ','))
finalSelectStatement<- noquote(paste("select(data,", gettingCloser, ")"))
finalData<- eval(parse(text=finalSelectStatement))
finalData<- SparkR::collect(finalData)
Может быть, это то, что вы ищете ... возможно нет. Тем не менее, я надеюсь, что это будет полезно.
Успехов, Нейт
Все это прекрасно работает для вектора «list2» с малой длиной. Но если у нас есть вектор «list2», где length (list2) = 10000, я получаю это сообщение в sparkR: ошибка при оценке аргумента «условие» при выборе метода для функции «фильтр»: Ошибка: оценка слишком сложна: бесконечная рекурсия/options (выражения =)? –