代码之家  ›  专栏  ›  技术社区  ›  Gayatri

pyspark 2-regex在<br>

  •  1
  • Gayatri  · 技术社区  · 8 年前

    我有张唱片

    "_row"\n"<BR>Datetime:2018.06.30^
    Name:ABC^
    Se:4^
    Machine:XXXXXXX^
    InnerTrace:^
    AdditionalInfo:^
    <ER>
    

    我想把所有东西都移走
    在每个记录中。有没有一种简单的方法可以用Spark数据框来实现这一点?

    import pyspark.sql.functions as f
    
    data.select(f.regexp_replace(pattern='\n<BR>',replacement="<BR>",str="row")
    

    像这样?模式应该是什么?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Florian    8 年前

    要匹配到字符串开头的所有字符,可以使用 .*<BR> . 但是,这与换行符不匹配( \n )我找到了解决办法 here 所以我们的模式可以是 (?s).*<BR> . 下面给出一个工作实例,希望能有所帮助!

    import pyspark.sql.functions as F
    
    df = spark.createDataFrame([('''"_row"\n"<BR>Datetime:2018.06.30^
    Name:ABC^
    Se:4^
    Machine:XXXXXXX^
    InnerTrace:^
    AdditionalInfo:^
    <ER>''',), ],schema=['text'])
    
    df = df.withColumn('text_cleaned',
                   F.regexp_replace(F.col('text'),pattern='(?s).*<BR>',replacement="<BR>"))
    

    让我们验证一下是否有效;

    print(df.select('text').collect()[0][0])
    

    输出

    "_row"
    "<BR>Datetime:2018.06.30^
    Name:ABC^
    Se:4^
    Machine:XXXXXXX^
    InnerTrace:^
    AdditionalInfo:^
    <ER>
    

    print(df.select('text_cleaned').collect()[0][0])
    

    输出:

    <BR>Datetime:2018.06.30^
    Name:ABC^
    Se:4^
    Machine:XXXXXXX^
    InnerTrace:^
    AdditionalInfo:^
    <ER>
    
    推荐文章