我正在嘗試映射以前加入的資料集。 這就是我的 DS 的樣子。
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)
}
這是我的代碼的重要部分。基本上,我想使用 CustomerID、姓名、姓氏以及可能的帳戶詳細資訊(帳戶 ID 和余額)創建新資料集。不幸的是,無論我嘗試做什么,都會收到錯誤“NullPointerException”。我錯過了什么嗎?我在第 1 列中沒有任何空值,只有在第二列中,據我了解,我的代碼應該足夠了。謝謝你。
uj5u.com熱心網友回復:
嘗試交換您的箱子里面的順序map。據我所知,(customer, account)當 account 為 null 時也會匹配。如果你反過來做,實際的 null-case 將首先匹配:
.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)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/512166.html
標籤:斯卡拉阿帕奇火花
上一篇:無法決議符號“TestKit”
