Создать набор данных Spark с частями другого набора данных

Я пытаюсь создать новый набор данных, взяв интервалы из другого набора данных, например, рассмотрите набор данных1 как вход и набор данных2 как выход:

dataset1 = [1, 2, 3, 4, 5, 6]
dataset2 = [1, 2, 2, 3, 3, 4, 4, 5, 5, 6]

Мне удалось сделать это с помощью массивов, но для mlib нужен набор данных.

Мой код с массивом:

def generateSeries(values: Array[Double], n: Int): Seq[Array[Float]] = {
    var res: Array[Array[Float]] = new Array[Array[Float]](m)
    for(i <- 0 to m-n){
        res :+ values(i to i + n)
    }
    return res
}

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


person Pedro Henrique    schedule 28.09.2016    source источник
comment
Можете ли вы опубликовать ожидаемый результат для данного набора данных?   -  person Balaji Reddy    schedule 28.09.2016
comment
@BDR спасибо за ответ, учитывая набор данных1 из описания вопроса, я хотел бы получить набор данных2   -  person Pedro Henrique    schedule 28.09.2016
comment
Вы хотите сказать, что ваш набор данных1 является вашим входом, а ожидаемый результат - набором данных2? правильно понял?   -  person Balaji Reddy    schedule 28.09.2016
comment
@BDR да, верно. Я отредактирую вопрос, чтобы уточнить это.   -  person Pedro Henrique    schedule 28.09.2016


Ответы (1)


Проблема здесь в том, что массив никоим образом не похож на DataSet. Набор данных неупорядочен и не имеет индексов, поэтому мышление в терминах массивов вам не поможет. Перейдите к Seq и обработайте его, вообще не используя индексы и позиции.

Таким образом, чтобы представить поведение, подобное массиву, в наборе данных, вам необходимо создать свои собственные индексы. Это просто делается путем сопоставления значения с позицией в «абстрактном массиве», который мы представляем.

Таким образом, тип вашего набора данных будет примерно таким, как [(Int,Int)], где первый — это индекс, а второй — значение. Они будут приходить неупорядоченными, поэтому вам нужно будет переработать свою логику, сделав ее более функциональной. Не совсем понятно, чего вы пытаетесь достичь, но я надеюсь, что дал вам подсказку. В противном случае лучше объясните ожидаемый результат в комментарии к моему ответу, и я отредактирую.

person Chobeat    schedule 28.09.2016
comment
спасибо за ответ и извините за плохое объяснение. Чего я пытаюсь достичь, так это набора данных, созданного с каждым интервалом размера n исходного набора данных. - person Pedro Henrique; 28.09.2016