【问题标题】:PySpark 2 - Regex replace everything before <BR>PySpark 2 - 正则表达式替换 <BR> 之前的所有内容
【发布时间】:2018-08-07 22:03:42
【问题描述】:

我有一个类似的记录

"_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")

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

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-2.0


    【解决方案1】:

    要匹配直到字符串开头的所有字符,您可以使用.*&lt;BR&gt;。但是,这不匹配换行符 (\n)。我找到了here 的解决方案,所以我们的模式可能是(?s).*&lt;BR&gt;。下面给出了一个工作示例,希望对您有所帮助!

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 2016-05-14
      • 2016-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多