开发者社区> 问答> 正文

扩展org.apache.spark.sql.Row功能:Spark Scala

在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?

展开
收起
社区小助手 2018-12-19 15:55:25 3774 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    您可以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

    2019-07-17 23:22:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Flink技术进阶 立即下载
Apache Spark: Cloud and On-Prem 立即下载
Hybrid Cloud and Apache Spark 立即下载

相关镜像