Вот еще один способ использования rlike
и регулярных выражений через API Dataframe:
import pyspark.sql.functions as f
from pyspark.sql.types import StringType
df = spark.createDataFrame([
('It was popularised in the 1960s with the release of Image sheets containing Buddy passages, and more recently with desktop publishing'),
('software like'),
('1 long title 1'),
('2 long title 2'),
('3 long title 3'),
('4 long title 4'),
('5 long title 5'),
('6 long title 6'),
('7 long title 7'),
('8 long title 8'),
('9 long title 9'),
('10 long title 10'),
('11 long title 11'),
('12 long title 12')
], StringType())
df.where(f.col("value").rlike("\d+\s+\w+\s+\w+\s+\d+")).show(100, False)
# +----------------+
# | value|
# +----------------+
# |1 long title 1|
# | 2 long title 2|
# | 3 long title 3|
# | 4 long title 4|
# | 5 long title 5|
# | 6 long title 6|
# | 7 long title 7|
# | 8 long title 8|
# | 9 long title 9|
# |10 long title 10|
# |11 long title 11|
# |12 long title 12|
# +----------------+
rlike здесь будет идентифицировать строки, для которых есть соответствие с регулярным выражением \d+\s+\w+\s+\w+\s+\d+
. Вот объяснение регулярному выражению:
- \ d +: одна или несколько цифр
- \ s +: после одного или нескольких пробелов
- \ w +: с последующимодна или несколько строчных букв
- \ s +: за которыми следуют один или несколько пробелов
- .....
Если вы уверены, что слова длинные изаголовок всегда присутствует, вы можете изменить регулярное выражение на: \d+\s+long\s+title\s+\d+
.
ОБНОВЛЕНИЕ:
Чтобы разбить ваш набор данных на новый набор данных со столбцами id, name, number
используйте выбор и разделите следующим образом:
df.where(df["value"].rlike("\d+\s+long\s+title\s+\d+")) \
.select(
f.split(df["value"], "\s+").getItem(0).alias("id"),
f.concat(f.split(df["value"], "\s+").getItem(1), f.split(df["value"], "\s+").getItem(2)).alias("name"),
f.split(df["value"], "\s+").getItem(3).alias("number")
).show()
# +---+---------+------+
# | id| name|number|
# +---+---------+------+
# | 1|longtitle| 1|
# | 2|longtitle| 2|
# | 3|longtitle| 3|
# | 4|longtitle| 4|
# | 5|longtitle| 5|
# | 6|longtitle| 6|
# | 7|longtitle| 7|
# | 8|longtitle| 8|
# | 9|longtitle| 9|
# | 10|longtitle| 10|
# | 11|longtitle| 11|
# | 12|longtitle| 12|
# +---+---------+------+