scala: заполнить несуществующий класс case после leftOuterJoin - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть парное СДР "A" класса дела в этом формате

case class MyCaseClass(ID: String, date: Date, label: String)

примерно так:

"ID1", ("ID1", 2006-06-28, "label1")
"ID2", ("ID2", 1996-05-13, "label2")
...

Я пытаюсь оставитьOuterJoin в этом СДР с массивом ID " B "вот так

[("ID1", "ID1") ("ID2", "ID2") ...]

Итак, я сделал

val C = B.leftOuterJoin(A)

, затем я получил несколько выходных записей, выглядящих так

("ID",("ID",Some(MyCaseClass("ID",2006-06-28,"label"))))

, а некоторые другие выходные записи выглядят как это

(ID,(ID,None))

Я понимаю, что это связано с тем, что некоторые идентификаторы присутствуют в B, но отсутствуют в A. Затем я хотел заполнить эти пропущенные значения, выполнив

val D = C.map(x => (x._1, x._2._2.getOrElse(MyCaseClass("xxx",9999-01-01,"-999"))))

, но scala пожаловался с этим сообщением об ошибке:

<console>:1: error: Decimal integer literals may not have a leading zero. (Octal syntax is obsolete.)
    val D = C.map(x => (x._1, x._2._2.getOrElse(MyCaseClass("xxx",9999-01-01,"-999"))))
                                                                       ^

Я изначально спрашивал здесь (scala: как исправить тип "option" после leftOuterJoin ) простая версия этого же вопроса, но это кажется сложнее, чем я думал. Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 08 февраля 2020

Вы пытаетесь создать объект класса case с полем даты с типом Date, но присвоение ему литерала содержит число. Вам нужно создать date объект вместо 9999-01-01.

val format = new java.text.SimpleDateFormat("yyyy-MM-dd")
val D = C.map(x => (x._1, x._2._2.getOrElse(MyCaseClass("xxx",format.parse("9999-01-01"),"-999"))))
...