在Spark Row
/* Returns true if there are any NULL values in this row. /
def anyNull: Boolean = {
val len = length
var i = 0
while (i < len) {
if (isNullAt(i)) { return true }
i += 1
}
false
}
可用于评估任何值的行连续为空。同样我想评估任何值
1)哪个是空字符串
2)我将传递的任何字符串?
有没有办法做到这一点来扩展功能org.apache.spark.sql.Row?
您可以implicit像这样使用scala 类。
package utility
import org.apache.commons.lang3.StringUtils
import org.apache.spark.sql.Row
import scala.util.{Failure, Success, Try}
object MyRowExtensions {
/**
* RowExt.
*
* @param row
*/
implicit class RowExt(row: Row) {
/**
* anyEmptyString
*
* @return Boolean
*/
def anyEmptyString(): Boolean = {
val len = row.length
var i = 0
while (i < len) {
if (StringUtils.isEmpty(row.get(i).toString)) {
return true
}
i += 1
}
false
}
/**
* anyString
*
* @param str
* @return Boolean
*/
def anyStringMatched(matchStr: String): Boolean = {
val len = row.length
var i = 0
while (i < len) {
if (row.get(i).toString == matchStr) {
return true
}
i += 1
}
false
}
/**
* getAsOption
*
* @param fieldName
* @tparam T
* @return Option[T]
*/
def getAsOption[T](fieldName: String): Option[T] = {
Try(row.getAs[T](fieldName)) match {
case Success(value) => Some(value)
case Failure(e) => None
}
}
}
}
看起来这样......
import utility.MyRowExtensions.RowExt
myDataFrame.map(r => r.anyStringMatched("myteststring")).show
myDataFrame.filter(_.anyEmptyString).show
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。