【发布时间】:2021-09-19 06:01:14
【问题描述】:
我很难获得 (java) spark 的 rlike 方法来处理特殊字符。通常一个简单的转义 \\ 或用 \Q 和 \E 引用就足以处理正则表达式中的特殊字符,但它们似乎不起作用。
以下面的示例代码为例。它应该将第 2 行和第 3 行显示为匹配 alist 中的一项,忽略大小写。但是下面的代码只显示第 2 行匹配。
如何根据与alist 中的一项匹配的“动物”列过滤数据集的行?
StructType schema = new StructType(new StructField[]{
new StructField("row_id", DataTypes.IntegerType, false, Metadata.empty()),
new StructField("animal", DataTypes.StringType, false, Metadata.empty())
});
Dataset<Row> dataset = spark.createDataFrame(
Arrays.asList(
RowFactory.create(1, "Bat"),
RowFactory.create(2, "Dog"),
RowFactory.create(3, "Cat (Type Not Stated)"),
RowFactory.create(4, "Other.")
), schema);
List<String> alist = Arrays.asList(
"\\QDOG\\E",
"\\QCat (Type Not Stated)\\E");
dataset = dataset.filter(dataset.col("animal").rlike(
"(?i)\\b("+String.join("|", alist)+")\\b"
));
dataset.show(5, false);
【问题讨论】:
标签: java regex apache-spark