繁体   English   中英

获取DataFrame行的字段的值-Spark Scala

[英]Getting values of Fields of a Row of DataFrame - Spark Scala

我有一个包含多个记录的DataFrame,

在此处输入图片说明

图片以显示DF包含数据

我想迭代此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")))

您可以对其余的验证规则执行此操作。

希望您的问题早日得到解决

map是一个转换,您需要应用一个动作 ,例如可以执行dfNextRows.map(x => ValidaLinea(x)).first Spark运行缓慢,很像标准集合中的Stream类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM