У меня огромный список файлов:
file.txt
file.txt.tar.gz
file.txt.tgz
core123165
core123165.bak
file.jpg
file.jpg.bak
file.png
file.png.tgz
...
Есть много случаев, когда я не могу перечислить их все.
Я хотел бы вывести тип файла на основе там расширение или имя файла.
Проблема в том, что я хотел бы игнорировать набор расширений, таких как tgz
или bak
. Пока что моя идея такова:
val DF = spark.createDF(
List(("file.txt"),("file.txt.tar.gz"),("file.txt.tgz"),
("core123165"),("core123165.bak"),("file.jpg"),
("file.jpg.bak"),("file.png"),("file.png.tgz")),
List(("name", StringType, true))
)
DF.withColumn("type",
when($"name".endsWith(".txt"), "text").
when($"name".endsWith(".txt.tar.gz"), "text").
when($"name".endsWith(".txt.tgz"), "text").
when($"name".endsWith(".txt.bz2"), "text").
when[...]
)
И так далее, однако мне нужно будет использовать regex для идентификации файла ядра с чем-то вроде ^core[0-9]{6}$
и хотел бы использовать regex для более простой идентификации другого типа, используя что-то вроде ^.+\.txt$|^.+\.txt.zip$|^.+\.txt.gz$
.
Поэтому мой вопрос заключается в том, существует ли метод Spark / Scala, применимый к столбцу, чтобы сделать что-то вроде:
val DF = spark.createDF(
List(("file.txt"),("file.txt.tar.gz"),("file.txt.tgz"),
("core123165"),("core123165.bak"),("file.jpg"),
("file.jpg.bak"),("file.png"),("file.png.tgz")),
List(("name", StringType, true))
)
DF.withColumn("type",
when($"name".matches("^.+\.txt$|^.+\.txt.zip$|^.+\.txt.gz$|^.+\.txt.bz2$^.+\.txt.tar.gz$^.+\.txt.tgz$"), "text").
when($"name".matches("^core[0-9]{6}$|^core[0-9]{6}\.bak$"), "core")
[...]
)
Это значительно улучшило бы мое лечение.
PS: я знаю, что могу еще больше разложить свое регулярное выражение, используя ^.+\.txt(\.bak|\.tgz|\.bz2)$
, но это был только пример.