我在讓(java)spark的rlike方法處理特殊字符方面遇到了困難。通常情況下,簡單的轉義或用Q和E引號就足以處理regex中的特殊字符,但它們似乎不起作用。
以下面的代碼為例。它應該顯示第2&3行與alist中的一個專案相匹配,無視情況。但是下面的代碼只顯示第2行是匹配的。
我怎樣才能根據 "動物 "列與alist中的一個專案相匹配來過濾資料集的行呢?
StructType schema = new StructType(new StructField[]{
new StructField("row_id", DataTypes.IntegerType, false, Metadata.empull())。
new StructField("animal", DataTypes.StringType, false, Metadata. empty())
});
資料集<行> dataset = spark.createDataFrame(
Arrays.asList(
RowFactory.create(1, "bat")。
RowFactory.create(2, "Dog") 。
RowFactory.create(3, "Cat (Type Not Stated)") 。
RowFactory.create(4, "其他。")
), schema)。
List<String> alist = Arrays.asList(
"QDOGE"。
"QCat (Type Not Stated)E")。)
dataset = dataset.filter(dataset.col("animal"/span>).rlike(
"(?i)("/span> String.join("|"/span>, alist) ")"/span>)
));
dataset.show(5, false) 。
uj5u.com熱心網友回復:
你的問題不是關于Q或E模式,而是關于b單詞邊界模式。
如果我把你最后的rlike regexp改掉,去掉b模式,如下:
dataset = dataset.filter(dataset.col("animal") .rlike(
"(?i)(" String.join("|", alist) ")"。
));
我得到兩行:
------ ---------------------
|row_id|animal |
------ ---------------------
|2 |Dog |
|3 |貓(Type Not Stated)||
------ ---------------------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/323781.html
標籤:
