java中spark Dataframe 列中的电子邮件正则表达式

li9yvcax  于 2023-02-24  发布在  Apache
关注(0)|答案(2)|浏览(119)

我正在尝试测试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|
+---+--------------+
olmpazwi

olmpazwi1#

我已经在pyspark中尝试过了,但是下面的表达式似乎得到了预期的结果。

data = [{"Mail": 'adHODFSOIHC9ds'},
            {"Mail": 'kcbc@dec.com'},
            {"Mail": 'abc@dec.com'},
            {"Mail": 'nnmp@let.net'}
            ]
    df = spark.createDataFrame(data)
    
    expr = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\.com$"
    df = df.filter(df["Mail"].rlike(expr))
    
    df.show()

希望有帮助。

jmp7cifd

jmp7cifd2#

使用下面的查询查询字符串使其工作。

String query = "email  REGEXP (\"[a-zA-Z0-9._%+-]+@[a-zA-Z_]+?\\.com\")";

相关问题