2015-08-03 3 views
1

Я хочу создать rdd, чтобы каждая строка имела индекс. Я пробовал следующийzipWithUniqueId() в flambo using clojure

Учитывая РДУ:

["a" "b" "c"] 

(defn make-row-index [input] 
    (let [{:keys [col]} input] 
    (swap! @rdd assoc :rdd (-> (:rdd xctx) 
          (f/map #(vector %1 %2) (range)))))) 

Желаемый результат:

(["a" 0] ["b" 1] ["c" 2]) 

я получил ошибку Arity, так как F/карта используется в качестве (f/map rdd fn) Требуется использовать zipWithUniqueId() в апача искра, но я теряюсь на том, как реализовать это, и я не могу найти эквивалентную функцию в flambo. Любые предложения и помощь приветствуются.

Apache-spark zip with Index

Map implementation in flambo

Благодаря

+0

@ zero323 Пожалуйста, помогите мне с этим :) – Jyd

ответ

1

Вы можете просто позвонить zipWithIndex с последующим map использованием untuple:

(def rdd (f/parallelize sc ["a" "b" "c"])) 
(f/map (.zipWithIndex rdd) f/untuple) 

Вы можете использовать .zipWithUniqueId точно так же, но результат будет другим от того, что вы expec т. zipWithUniqueId будет генерировать пары, но поле индекса не будет упорядочено.

Следует также использовать zip, но, насколько я могу судить, он не работает с бесконечным диапазоном.

(def idx (f/parallelize sc (range (f/count rdd)))) 
(f/map (.zip rdd idx) f/untuple) 

Всякий раз, когда вы используете zip вы должны быть осторожны, хотя Вообще говоря РДД следует рассматривать как неупорядоченные коллекции, если есть перетасовка участия.

+0

Спасибо @ zero323 работал как волшебная – Jyd

+0

у меня есть еще один блок - я попытался это '(defn Catch-Specific-строкам «Функции поймать строку (ы) с конкретный номер строки в списке строк input = {: rows-list [val (s)]} " [ввод строки] (let [{: keys [rows-list]} input row-and -index (-> (: rdd @ row-with-index) (f/filter # (= строка (get% 0))))] (когда-нет (некоторые # (= (get row-and-index 1)%) rows-list) row))) 'и я сталкиваюсь с какой-то ошибкой. Что я делаю неправильно – Jyd

+0

Не могли бы вы разместить его в качестве вопроса с примером ввода/вывода? Я не уверен, что я понимаю, что вы хотите здесь (простой фильтр по номерам строк?) По комментариям не очень хорошо подходит для размещения кода. – zero323