regex - 在正则表达式列上应用“rlike”?
问题描述
我希望在列上应用“rlike”函数,但是我希望能够输入一列(这是一个正则表达式字符串),而不是标准的正则表达式字符串。
IE。$col1.rlike($col2)
其中 $col2 在数据框中采用正则表达式格式
我尝试过应用 UDF:
def rLike = udf((s: String, col: Column) => col.rlike(s))
这一直给我错误:
java.lang.UnsupportedOperationException:不支持 org.apache.spark.sql.Column 类型的架构
谁能告诉我如何解决这个问题。
解决方案
方法rlike
不支持存储在Column
. 另一种方法是使用regexp_replace
如下所示:
import org.apache.spark.sql.functions._
import spark.implicits._
val df = Seq(
("a123", "[a-z]\\d+"),
("b456", "[a-z]+")
).toDF("text", "pattern")
val matched = "Matched!" // can be any value non-existent in column `text`
df.where(regexp_replace($"text", $"pattern", lit(matched)) === matched).show
// +----+--------+
// |text| pattern|
// +----+--------+
// |a123|[a-z]\d+|
// +----+--------+
如果您想将自定义实现rlike
为 UDF(与原生 Spark API 函数相比通常无法很好地扩展),这里有一种方法:
def rlike = udf( (text: String, pattern: String) => text match {
case pattern.r() => true
case _ => false
} )
// Applying the UDF
df.where(rlike($"text", $"pattern"))
推荐阅读
- javascript - Javascript - 在表格单元格中查找多个数值并将厘米转换为英寸
- arrays - 使数组更大 LISP
- python - 提取常见于第一个字符串结尾和第二个字符串开头的子字符串
- javascript - 动态导出节点模块
- ruby-on-rails - Rails 6 在视图中将 BLOB 列显示为图像
- javascript - 如何从 JS 中获取 CSS 值?
- android - 同步运行 google mlkit 文本识别
- javascript - 将 Angular 添加到现有项目
- c++ - 在 C++ 中限制对类的公共成员的访问的设计模式
- c# - 在 C# 中使用 SerialPort 通过 USB (PC/Arduino) 的通信速度似乎“剪辑”