2017-02-16 2 views
1

У меня есть файл, который содержит имена в каждой строке, я хочу добавить числа последовательно в каждую строку. Для, например, если файл как этотSpark cluster Добавление числа в каждую строку в файле

a 
b 
c 
d 

Я хочу, чтобы достичь этого

a,1 
b,2 
c,3 
d,4 

меня написать этот код, чтобы достичь этой

val lines = sc.textFile("data.txt") 
val pair = lines.zipWithIndex().map{case(i,line) => i.toString +","+line} 
pair.collect() 

Но, как вы знаете, Спарк распределяет его по различным кластерам. Поэтому я не уверен, что это сработает. Кто-нибудь может рассказать мне, как я могу это достичь? Заранее спасибо.

+0

какова связь между данными и номер строки –

+0

в файле data.txt «а» в первой строке, «В» во второй строке. Поэтому в основном я добавляю номер строки – gashu

+0

У вас возникли проблемы с 'zipWithIndex'? Он должен работать так, как вы ожидаете, даже задачи распределены между узлами. – Mariusz

ответ

1

Если вы запустите этот код, вы получите результат, который вы ожидаете. Даже когда искра распределяет свою задачу по кластеру, но ничего не влияет на что-либо программно. В случае вашего примера, если вы работаете с 2 рабочими узлами, файл будет разделен на два раздела, которые будут храниться на каждом соответствующем рабочем узле. Теперь, когда программа запустится, и когда драйвер столкнется с zipWithIndex, он удостоверится, что и у работника будет информация о другом разделе файла, так как это требование zipWithIndex.

В искрах различных преобразованиях и действиях есть разные требования и главный узел, чтобы убедиться, что эти требования выполняются, как разные потребности в перетасовке данных, чтобы убедиться, что существует только одна копия.

Другое дело, если вы хотите сделать пару слов с номером строки, тогда вам не нужна карта. Только это будет также работать

pair = lines.zipWithIndex(); 

Я побежал пример в Java с помощью данной строки кода без карты, и он дал мне правильный вывод. Хотя номер строки начинался с 0. Но все же он доказывает, что количество рабочих узлов не будет иметь никакого эффекта при отображении номера строки в порядке.

// output of worker 1 part-00000 
    a,0 
    b,1 

//output of worker 2 part-00001 
    c,2 
    d,3 
+0

Спасибо за объяснение – gashu

Смежные вопросы