скажем, у одного есть несколько файлов в каталоге, каждый из которых
File1
20100101|12.34|...
20100101|12.34|...
20100101|36.00|...
20100102|36.00|...
20100101|14.00|...
20100101|14.00|...
File2
20100101|12.34|...
20100101|12.34|...
20100101|36.00|...
20100102|36.00|...
20100101|14.00|...
20100101|14.00|...
соседние строки с одинаковой датой изначение, соответствующее тому же событию.Две строки в двух отдельных файлах не могут быть смежными.
ожидаемый результат:
e1|20100101|12.34|...
e1|20100101|12.34|...
e2|20100101|36.00|...
e3|20100102|36.00|...
e4|20100101|14.00|...
e4|20100101|14.00|...
e5|20100101|12.34|...
e5|20100101|12.34|...
e6|20100101|36.00|...
e7|20100102|36.00|...
e8|20100101|14.00|...
e8|20100101|14.00|...
где eN - здесь произвольное значение (e1 <> e2 <> e3 ...) дляпоясните пример.
обеспечивает ли следующий код уникальный идентификатор события для всех строк всех файлов:
case class Event(
LineNumber: Long, var EventId: Long,
Date: String, Value: String //,..
)
val lines = sc.textFile("theDirectory")
val rows = lines.filter(l => !l.startsWith("someString")).zipWithUniqueId
.map(l => l._2.toString +: l._1.split("""\|""", -1));
var lastValue: Float = 0;
var lastDate: String = "00010101";
var eventId: Long = 0;
var rowDF = rows
.map(c => {
var e = Event(
c(0).toLong, 0, c(1), c(2) //,...
);
if ( e.Date != lastDate || e.Value != lastValue) {
lastDate = e.Date
lastValue = e.Value
eventId = e.LineNumber
}
e.EventId = eventId
e
}).toDF();
в основном я использую уникальный номер строки, заданный zipWithUniqueId
в качестве ключадля последовательности соседних строк.
Я думаю, что мой основной вопрос: есть ли вероятность, что вторая операция карты разделит содержимое файлов по нескольким процессам?