Pyspark Получить подстроку из имени файла и сохранить как новый столбец - PullRequest
0 голосов
/ 10 июля 2019

Я обрабатываю файлы CSV из S3 с помощью pyspark, однако я хочу включить имя файла в качестве нового столбца, для которого я использую следующий код:

spark.udf.register("filenamefunc", lambda x: x.rsplit('/', 1)[-2])
df=spark.read.csv("s3a://exportcsv-battery/S5/243/101*",sep=',',header=True,inferSchema=True)
df=df.withColumn("filename", 'filenamefunc(input_file_name())')

Но вместо имени файла мне нужна его подстрока, например, если это input_file_name: -

S3A: //exportcsv-battery/S5/243/101_002932_243_AAA_A_T01_AAA_AAA_0_0_0_0_2_10Hz.csv

Я только хочу, чтобы 243 извлекался и сохранялся в новом столбце, для которого я определил UDF как:

spark.udf.register("filenamefunc", lambda x: x.rsplit('/', 1)[-2])

Но, похоже, это не работает. Есть ли что-то, что я могу сделать, чтобы это исправить или другой подход? Спасибо!

1 Ответ

1 голос
/ 10 июля 2019

Вы можете использовать split() функцию

import pyspark.sql.functions as f

[...]

df = df.withColumn('filename', f.split(f.input_file_name(), '/')[4])
...