我正在尝试测试regexp的spark。我很困惑,因为它对一些regex有效,对其他regex失败。
在下面的代码中,我试图使用regexp来查找匹配。但是,它没有返回任何东西。我遗漏了什么?
我已经验证了正则表达式没有问题。
package com.hsec.correlation;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructType;
import org.json.simple.parser.ParseException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class test {
public static SparkSession spark;
public static void main(String[] args) throws IOException, ParseException {
spark = SparkSession.builder()
.appName("SparkStructuredStreamingTest")
.master("local[2]")
.getOrCreate();
// code
StructType structType = new StructType();
structType = structType.add("id", DataTypes.StringType, false);
structType = structType.add("email", DataTypes.StringType, false);
List<Row> nums = new ArrayList<Row>();
nums.add(RowFactory.create("1", "abc@dec.com"));
nums.add(RowFactory.create("2", "adHODFSOIHC9ds"));
nums.add(RowFactory.create("3", "kcbc@dec.com"));
nums.add(RowFactory.create("4", "nnmp@let.net"));
Dataset<Row> df = spark.createDataFrame(nums, structType);
String query="(email REGEXP '(\\w+@[a-zA-Z_]+?\\.com)')";
df=df.filter(query);
df.show();
}
}
输出:
+---+-----+
| id|email|
+---+-----+
+---+-----+
预期:
+---+--------------+
| id| email|
+---+--------------+
| 1| abc@dec.com|
| 3| kcbc@dec.com|
+---+--------------+
2条答案
按热度按时间olmpazwi1#
我已经在pyspark中尝试过了,但是下面的表达式似乎得到了预期的结果。
希望有帮助。
jmp7cifd2#
使用下面的查询查询字符串使其工作。