[英]Getting values of Fields of a Row of DataFrame - Spark Scala
我有一個包含多個記錄的DataFrame,
我想迭代此DataFrame的每一行,以驗證其每一列的數據,並執行以下代碼:
val validDF = dfNextRows.map {
x => ValidateRow(x)
}
def ValidateRow(row: Row) : Boolean = {
val nC = row.getString(0)
val si = row.getString(1)
val iD = row.getString(2)
val iH = row.getString(3)
val sF = row.getString(4)
// Stuff to validate the data field of each row
validateNC(nC)
validateSI(SI)
validateID(ID)
validateIF(IF)
validateSF(SF)
true
}
但是,進行一些測試,如果我想打印val nC的值(以確保將正確的信息發送到每個函數),它不會給我帶來任何好處:
def ValidateRow(row: Row) : Boolean = {
val nC = row.getString(0)
val si = row.getString(1)
val iD = row.getString(2)
val iH = row.getString(3)
val sF = row.getString(4)
println(nC)
validateNC(nC)
validateSI(SI)
validateID(ID)
validateIF(IF)
validateSF(SF)
true
}
我怎么知道我正在向每個函數發送正確的信息(我正在正確讀取行的每一列的數據)?
問候。
Spark數據框功能應為您提供一個良好的開端。
如果您的驗證函數足夠簡單(例如檢查空值),則可以將函數嵌入為
dfNextRows.withColumn("num_cta", when(col("num_cta").isNotNull, col("num_cta").otherwise(lit(0)) ))
您可以通過使用適當的spark數據框函數以相同的方式對其他列執行相同的操作
如果您的驗證規則很復雜,則可以將udf
函數用作
def validateNC = udf((num_cta : Long)=> {
//define your rules here
})
您可以調用udf
使用功能withColumn
作為
dfNextRows.withColumn("num_cta", validateNC(col("num_cta")))
您可以對其余的驗證規則執行此操作。
希望您的問題早日得到解決
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.