Я новичок в stackoverflow (постоянный читатель, но сейчас хочу поучаствовать). Я также новичок в Scala, Spark и функциональном программировании. Будем рады внести свой вклад и учиться на всех фронтах.
мой вопрос:
Я работаю с переменной длиной записи (несколько разделов в файле) с полями фиксированной позиции (также известной как фиксированная ширина - где формат определяется шириной столбца). Например, макет myfile.txt (начиная с 1): 1-5 = столбец 1, 5-6 = столбец 2, 6-20 = столбец 3 и 20-28 = столбец 4; тогда как от sub-header-a2 до sub-footer-z2 имеет совершенно другой макет 1-3 = столбец 1, 3-6 = столбец 2 и 6-11 = столбец 3
Пример myfile.txt:
header
sub-header-a1
1234a Mr. John Doe 19770101
4321a Mrs. Jane Doe19770101
sub-footer-z1
sub-header-a2
1203400001
4302100001
sub-footer-z2
footer
Используя Spark / Scala, я хочу выбрать раздел от подзаголовка-a1 до подзаголовка-z1 в одном RDD, а другой раздел - во втором RDD для дальнейшей обработки (без подзаголовка / нижнего колонтитула). Два отдельных RDD должны быть созданы из baseRDDInput.
Первый RDD
1234a Mr. John Doe 19770101
4321a Mrs. Jane Doe19770101
Второй СДР
1203400001
4302100001
Я много и мало искал примеры кода для выбора диапазона из базового RDD и преобразования в другой RDD. Нашел это, но у меня есть a StringRDD, и я не получаю часть RangePartitioner. Все остальные примеры чтения файлов, которые я нашел, всегда относятся к CSV и не имеют вложенных разделов.
Вот что у меня есть на данный момент:
// created a base RDD from raw file, I assumed that I need an index
val baseRDDinput = sc.textFile("myfile.txt") zipWithIndex ()
// get the start and end point of my range
val (start, end) = ("sub-header-a1", "sub-footer-z1")
// get the index of start and end point
???
// iterator over index in order (index is stable based on comments https://stackoverflow.com/questions/26828815/how-to-get-element-by-index-in-spark-rdd-java) and select elements between start and end index and create RDD-1 then do the same with next section.
???
// next based on code examples from (https://stackoverflow.com/questions/8299885/how-to-split-a-string-given-a-list-of-positions-in-scala) I will parse the element and make k/v using the first column of file as the key
Мы будем очень благодарны за любые предложения по подходу и / или коду. Мне просто нужен толчок в правильном направлении. Заранее спасибо.
ОБНОВЛЕНИЕ: исправлены ссылки