У меня есть большая таблица в Hive (от десятков до сотен миллионов строк), из которой я хочу выбрать только те, которые соответствуют регулярному выражению.
В настоящее время у меня есть небольшой пример, чтобы сначала попробовать мой код:
columns = ['id', 'column']
vals = [
(1, "VAL_ID1 BD store"),
(2, "VAL_ID2 BD store"),
(3, "VAL_ID3 BD model"),
(4, "BAD WRONG")
]
df = spark.createDataFrame(vals, columns)
И затем я протестировал регулярное выражение, которое выглядит так:
df_regex = df.withColumn('newColumn',F.regexp_extract(df['id'], '^(([a-zA-Z]{2}[a-zA-Z0-9]{1})+(_[a-zA-Z]{2}[a-zA-Z0-9]{1})*)(\s|$)',1))
Как я уже сказал, это тестовый фрейм данных.В будущем я заставлю его «посмотреть» на очень большой стол.Есть ли способ только добавить строки, которые соответствуют регулярному выражению, и таким образом создать намного меньший размер данных?
Как сейчас, я читаю каждую строку, а затем добавляю столбецwithColumn
с пустым полем для строк, которые не соответствуют регулярному выражению.Это имеет смысл, но я чувствую, что есть смысл не читать этот фрейм два раза, если я могу его избежать.