PySpark - каталог, напечатанный в виде столбца в DF - PullRequest
0 голосов
/ 23 сентября 2018

В HDFS у меня есть такие каталоги, как этот

hdfs: // имя хоста / данные / канал / данные / dt = 20180909 / час = 04 / великобритания / customer1 '

в моемСценарий, я извлек всю информацию из файлов, но мне также нужно захватить местоположение в выходном фрейме данных.Единственное место, где это хранится, находится в пути к каталогу (например, выше = Великобритания)

Есть ли способ извлечь это, чтобы сформировать часть вывода df в новом столбце?

ТАКЖЕ,

У меня есть следующий оператор в моем коде Pyspark.

Проблема в том, что когда мне нравится ("% i ...), он думает, что ищет целочисленную переменную - применяются те же проблемыс% g

Я пытался экранировать символ с помощью \, но это не сработало.

Если я поменяю все слова, чтобы начать с 'b', проблема не будетсуществует. Так что до этой проблемы.

Кто-нибудь знает, как я могу избежать этой проблемы?

    .withColumn('cleanapn',\
    sqlfunc.when(df4.apnstr.like("%info%"), "Info")\
    .when(df4.apnstr.like("%books%"), "Books")\
    .when(df4.apnstr.like("%interest%"), "Interest")\
    .when(df4.apnstr.like("%gonefishing%"), "Gonefishing")\
    .otherwise("Other"))\

Спасибо!

1 Ответ

0 голосов
/ 23 сентября 2018

Первая часть вашей проблемы может быть легко решена с помощью wholeTextFiles api, который дает кортеж (имя файла, содержимое файла), который вы можете использовать для извлечения информации о местоположении.

например:

rdd1 = sc.wholeTextFiles("/data/feed/data/dt=20180909/hour=04/uk/customer1/") 

даст вам rdd1 как -

("/data/feed/data/dt=20180909/hour=04/uk/customer1/file1.txt","<data-in-file1.txt>")
("/data/feed/data/dt=20180909/hour=04/uk/customer1/file2.txt","<data-in-file2.txt>")

, которым вы можете манипулировать, чтобы получить кадр данных DataFrame[location: string, data: string] как -

df = rdd1 \
       .map(lambda x : (x[0].split("/")[-2],x[1]))\
       .toDF(['location','data'])

в идеале это должно дать,

('uk',"<data-in-file1.txt>")
('uk',""<data-in-file2.txt>")

относительно вашей второй проблемы, я не думаю, что что-то не так с usng% i или% g, вы должны включить конкретную ошибку, которую вы получаете.

...