Pyspark正则表达式到数据框

时间:2018-08-06 14:38:56

标签: pyspark

我有一个与此相似的代码:

from pyspark.sql.functions import udf
from pyspark.sql.types import BooleanType

def regex_filter(x):
    regexs = ['.*123.*']

    if x and x.strip():
        for r in regexs:
            if re.match(r, x, re.IGNORECASE):
                return True

    return False 


filter_udf = udf(regex_filter, BooleanType())

df_filtered = df.filter(filter_udf(df.fieldXX))

我想使用“ regexs” var来验证“ fieldXX”中是否有任何数字“ 123”

我不知道我做错了什么! 有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

正则表达式不正确。

我认为应该是这样的:

var LoginInfoSchema = new mongoose.Schema ({ _id : String, user: String, password: String }); var user = mongoose.model('user',LoginInfoSchema); app.post('/login', function(req, res) { new user({ _id : req.body.email, user : req.body.user, password : req.body.password }).save(function(err,doc){ if(err) res.json(err); else res.redirect('/'); }); mongoose.connect('mongodb://localhost:27017/UserInfo',function(err,db){ if(err) console.log(err); db.collection("users").insertOne(user, function(error, result) { if(error) console.log(error); console.log("1 document inserted"); db.close(); }); }); });

答案 1 :(得分:0)

您可以使用SQL函数来实现这一目标

df.createOrReplaceTempView("df_temp")
df_1 = spark.sql("select *, case when col1 like '%123%' then 'TRUE' else 'FALSE' end col2 from df_temp")

使用UDF的缺点是您无法将数据框保存回去或对该数据框做进一步的处理。