Scala Создание комбинации по ключу эффективно - PullRequest
0 голосов
/ 15 мая 2018

Обновление

Исходный файл - это текстовый файл в формате

( 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, было бы здорово, если бы кто-нибудь мог подсказать мне, как улучшить производительность этой операции.

...