[FIXED] NullPointerException-Problem mit Scala, Problem mit Mapping

Ausgabe

Ich versuche, ein zuvor verbundenes Dataset zuzuordnen.
So sieht mein DS aus.

  case class CustomerData(
                       customerId: String,
                       forename: String,
                       surname: String
                     )

  case class AccountData(
                          customerId: String,
                          accountId: String,
                          balance: Long
                        )


    val customerDS: Dataset[CustomerData] = customerDF.as[CustomerData]
    val accountDS: Dataset[AccountData] = accountDF.withColumn("balance", 'balance.cast("long")).as[AccountData]

  case class CustomerAccountClass(
                               customerId: String,
                               forename: String,
                               surname: String,
                               accountId: String,
                               balance: Long

  val customerAccountDataDS = customerDS
    .joinWith(accountDS, customerDS.col("customerId") === accountDS.col("customerId"), "left")
    .map {
     case (customer, account) => CustomerAccountClass(customer.customerId, customer.forename, customer.surname, account.accountId, account.balance)
     case (customer, null) => CustomerAccountClass(customer.customerId, customer.forename, customer.surname, "", 0)
   }

Dies ist der wesentliche Teil meines Codes. Grundsätzlich möchte ich einen neuen Datensatz mit CustomerID, Name, Nachname und wenn möglich Kontodaten (Konto-ID und Saldo) erstellen. Leider erhalte ich bei allem, was ich versuche, den Fehler “NullPointerException”. Vermisse ich etwas? Ich habe keine Nullen in Spalte 1, nur in der zweiten, soweit ich verstehe, sollte mein Code ausreichen. Vielen Dank.

Lösung

Versuchen Sie, die Reihenfolge Ihrer Hüllen im Inneren zu tauschen map. Soweit ich weiß, (customer, account)wird das auch übereinstimmen, wenn das Konto null ist. Wenn Sie es umgekehrt machen, wird der tatsächliche Nullfall zuerst übereinstimmen:

.map {
    case (customer, null) => CustomerAccountClass(customer.customerId, customer.forename, customer.surname, "", 0)
    case (customer, account) => CustomerAccountClass(customer.customerId, customer.forename, customer.surname, account.accountId, account.balance)
}


Beantwortet von –
marstran


Antwort geprüft von –
Jay B. (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like