Я пытаюсь выполнить все комбинации линий без повторения текстового файла.Искра - комбинации без повторения
Пример:
Результат:
- Линия 1 с линией 2 = (1,2)
- линии 1 с линией 3 = (1,2)
- Линия 1 с линией 4 = (1,1)
- Линия 1 с линией 5 = (1,1)
- линия 2 с линией 3 = (2,2)
- линия 2 с линией 4 = (2,1)
- линия 2 с линией 5 = (2,1)
- Линия 3 с линией 4 = (2,1)
- Строка 3 с линией 5 = (2,1)
- линия 4 с линией 5 = (1,1)
или
Учитывая (х, у), если 0 еще 1 (х = у!):
Я следующий код:
def processCombinations(rdd: RDD[String]) = {
rdd.mapPartitions({ partition => {
var previous: String = null;
if (partition.hasNext)
previous = partition.next
for (element <- partition) yield {
if (previous == element)
"1"
else
"0"
}
}
})
}
Кусок кода выше делает комбинации первого элемента моего RDD, другими словами: (1, 2) (1,2) (1,1) (1,1).
Проблема: этот код ТОЛЬКО работает с ОДНОМ РАЗДЕЛОМ. Я хотел бы сделать эту работу со многими разделами, как я могу это сделать?
В вашем примере много повторяющихся комбинаций, которые, как вы говорите, вам не нужны. Кроме того, все после полужирного ** или ** - это своего рода тайна. Не могли бы вы потратить некоторое время, чтобы улучшить свой вопрос? – marios
@marios, комбинации, которые я хочу, рассматривают линии, но получают данные. (1,2) = (1,2) (1,3) = (1,2) (1,4) = (1,1) ... После того, выделены жирным шрифтом, или: , если (x! = y) 0 else 1 – Felipe
Похоже, что для этого потребуется довольно сложная агрегатная функция, так как это не совсем простая задача для распространения из-за требования отслеживать все состояние на самом деле. –