我有一个包含多条记录的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 的值(为了确保我将相关信息发送到每个函数),它不会&#39带给我任何东西:
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
}
我怎么知道我向每个功能发送了正确的信息(我正确地读取了每行的数据)?
问候。
答案 0 :(得分:3)
Spark dataframe function应该给你一个良好的开端。
如果验证函数足够简单(比如检查空值),那么可以将函数嵌入为
dfNextRows.withColumn("num_cta", when(col("num_cta").isNotNull, col("num_cta").otherwise(lit(0)) ))
只需使用适当的spark dataframe functions
,您就可以以相同的方式对其他列执行相同的操作如果您的验证规则很复杂,那么您可以使用udf
函数
def validateNC = udf((num_cta : Long)=> {
//define your rules here
})
您可以使用udf
作为
withColumn
函数
dfNextRows.withColumn("num_cta", validateNC(col("num_cta")))
您可以为剩余的验证规则执行此操作。
我希望很快就能解决您的问题
答案 1 :(得分:2)