【问题标题】:Scala Spark filter rows in DataFrame with substring and characterScala Spark使用子字符串和字符过滤DataFrame中的行
【发布时间】:2018-05-16 04:12:51
【问题描述】:

我想过滤我的DF 中的一些行,保留列 "startSubString" 开头的行并不包含角色'#'

我可以使用 两个过滤器做我想做的事:

.filter( _!= col("theCol").contains("#"))
.filter( col("theCol").startsWith("startSubString"))

但想知道是否不能仅在一个过滤器中完成以获得更好的性能:

类似:

.filter(col("theCol").rlike("^(startSubString).*^[^@]"))

虽然这不起作用。我错过了什么?

【问题讨论】:

  • 您可以随时使用 ||。 .filter( _!= col("theCol").contains("#") || col("theCol").startsWith("http")) 不行吗?
  • 我会保持原样,我认为它比 1 个巨大的逻辑表达式更具可读性。 Spark的优化器无论如何都会结合过滤器,所以我认为你不会获得性能

标签: regex scala apache-spark dataframe filter


【解决方案1】:

我一直使用 substr(),但我不明白为什么 starsWith() 也不起作用,但这就是我所做的......

.filter( (!(col("theCol").contains("#"))) && (col("theCol").substr(1,4) === ("http")))

【讨论】:

    【解决方案2】:

    你可以使用 startsWith()

    .filter( !col("theCol").contains("#") && col("theCol").startsWith("startSubString") )
    

    【讨论】:

      猜你喜欢
      • 2016-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2012-07-06
      • 2020-06-07
      相关资源
      最近更新 更多