Обновление
Исходный файл - это текстовый файл в формате
( record_id, element )
( 1 1 2 3 )
( 2 2 5 6 7 )
Я использовал следующую функцию для чтения входного файла:
sc.textFile(input)
и обработайте его в формате массива записей ниже.
=============================================== ==========================
Вот пример массива в Scala Im, работающего в
Массив записей выглядит следующим образом:
Array(Record_Id , Array(Element) )
( 1 , Array(1,2,3 ) )
( 2 , Array(2,5,6,7) )
....
Я написал функцию карты scala для извлечения префикса (динамически здесь я беру первую половину элементов) каждого массива
val prefix = records.map(x => ((x._1, x._2) ,(x._2.take((x._2.size*0.5).ceil ))) )
Что даст мне
Array(Record_Id , Array(Element) , Prefix)
( 1 , Array(1,2,3 ) , Array(1,2))
( 2 , Array(2,5,6,7) , Array(2,5))
....
Теперь я пытаюсь сгенерировать RDD, который использует каждый префикс в качестве ключа, который будет выглядеть примерно так:
(Prefix , Array(Record_Id , Array(Element) )
( 1 , (1 , Array(1,2,3 ) )
( 2 , (1 , Array(1,2,3 ) )
( 2 , (2 , Array(2,5,6,7) )
( 5 , (2 , Array(2,5,6,7) )
....
Я попробовал следующее:
val pairedWithKey = prefix.map{case (k,v) => v.map(i => k ->i)}
Отлично работает с данными малого объема.
Однако, как только я использую это в больших наборах данных, загрузка будет длиться вечно.
Я все еще новичок в scala, было бы здорово, если бы кто-нибудь мог подсказать мне, как улучшить производительность этой операции.