PySpark 2 - 正则表达式取代之前的一切

问题描述 投票:1回答:1

我有一个类似的记录

"_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个回答
1
投票

要匹配所有字符直到字符串的开头,您可以使用.*<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>
© www.soinside.com 2019 - 2024. All rights reserved.