Python PySpark 2-正则表达式替换之前的所有内容<;BR>;

Python PySpark 2-正则表达式替换之前的所有内容<;BR>;,python,apache-spark,pyspark,apache-spark-2.0,Python,Apache Spark,Pyspark,Apache Spark 2.0,我有一张像这样的唱片 "_row"\n"<BR>Datetime:2018.06.30^ Name:ABC^ Se:4^ Machine:XXXXXXX^ InnerTrace:^ AdditionalInfo:^ <ER> “\u row”\n”日期时间:2018.06.30^ 姓名:ABC^ Se:4^ 机器:XXXXXXX^ 内部跟踪:^ 其他信息:^ 我想删除每个记录中之前的所有内容。是否有一种简单的方法可以使用spark dataframe来完成此操作 im

我有一张像这样的唱片

"_row"\n"<BR>Datetime:2018.06.30^
Name:ABC^
Se:4^
Machine:XXXXXXX^
InnerTrace:^
AdditionalInfo:^
<ER>
“\u row”\n”
日期时间:2018.06.30^ 姓名:ABC^ Se:4^ 机器:XXXXXXX^ 内部跟踪:^ 其他信息:^
我想删除每个记录中
之前的所有内容。是否有一种简单的方法可以使用spark dataframe来完成此操作

import pyspark.sql.functions as f

data.select(f.regexp_replace(pattern='\n<BR>',replacement="<BR>",str="row")
导入pyspark.sql.f函数
数据。选择(f.regexp_replace(pattern='\n
',replacement=“
”,str=“row”)

类似这样的内容?模式应该是什么?

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

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>"))
输出

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

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

日期时间:2018.06.30^ 姓名:ABC^ Se:4^ 机器:XXXXXXX^ 内部跟踪:^ 其他信息:^
print(df.select('text_cleaned').collect()[0][0])
<BR>Datetime:2018.06.30^
Name:ABC^
Se:4^
Machine:XXXXXXX^
InnerTrace:^
AdditionalInfo:^
<ER>