#scala #apache-spark #apache-spark-sql
#scala #apache-spark #apache-spark-sql
Вопрос:
val someDF = Seq(
(8, "abc"),
(64, "sdf"),
(-27, "yui")
).toDF("number", "word")
def numberValidation(numberValidation:Any): Boolean=
numberValidation match{
case int :Integer => true
case _ => false}
def wordValidatoin(wordValidation:Any): Boolean=
wordValidation match{
case str: String => true
case _ => false}
Мне нужно передать каждую строку с соответствующими значениями указанным функциям.
Значение столбца number в первой строке = 8, которое передается в numbervalidation, а столбец word в первой строке — abc, передаваемый в wordValidatoin
Ответ №1:
Используйте spark UDF и измените свой метод, как показано ниже :
val numberValidation = udf((numberValidation: Any) => {
numberValidation match{
case int :Integer => true
case _ => false
}
})
val wordValidatoin = udf((wordValidation:Any)): =>{
wordValidation match{
case str: String => true
case _ => false
}
})
и проверьте с помощью DF, как показано ниже :
someDF
.withColumn("checkNum",numberValidation($"number"))
.withColumn("checWord",wordValidatoin($"word"))
.show