Несоответствие типов в Scala при работе с картой - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь выполнить операцию отображения на Spark DStream в приведенном ниже коде:

val hashesInRecords: DStream[(RecordKey, Array[Int])] = records.map(record => {
      val hashes: List[Int] = calculateIndexing(record.fields())
      val ints: Array[Int] = hashes.toArray(Array.ofDim[Int](hashes.length))
      (new RecordKey(record.key, hashes.length), ints)
    })

Код выглядит хорошо в IntelliJ, однако, когда я пытаюсь собрать, я получаю сообщение об ошибке, которое на самом деле не понимаю:

Error:(53, 61) type mismatch;
 found   : Array[Int]
 required: scala.reflect.ClassTag[Int]
      val ints: Array[Int] = hashes.toArray(Array.ofDim[Int](hashes.length))

Эта ошибка сохраняется даже после добавления типа в операцию карты следующим образом:

records.map[(RecordKey, Array[Int])](record => {...

1 Ответ

0 голосов
/ 18 января 2019

Это должно решить вашу проблему, также оно позволяет избежать вызова List.length, который равен O ( N ) , и вместо него используется Array.length, который равен O ( 1 ) . * +1011 *

val hashesInRecords: DStream[(RecordKey, Array[Int])] = records.map { record =>
  val ints = calculateIndexing(record.fields()).toArray
  (new RecordKey(record.key, ints.length), ints)
}
...