Разделить соответствующие значения столбца в pyspark

Ниже таблицы будет входной фрейм данных

столбец1столбец2столбец3
112;34;56Австралия;SL;NZ
231;54;81Индия; США; Великобритания
3нулевойБан
4Неднулевой

Ожидаемый выходной фрейм данных [значения col2 и col3 должны быть разделены на ; соответственно]

столбец1столбец2столбец3
112Аус
134СЛ
156Новая Зеландия
231инд
254НАС
281Великобритания
3нулевойБан
4Неднулевой
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать функцию pyspark split() для преобразования столбца с несколькими значениями в массив, а затем функцию explode() для создания нескольких строк из разных значений.

Это может выглядеть так:

df = df.withColumn("<columnName>", explode(split(df.<columnName>, ";")))

Если вы хотите сохранить значения NULL, вы можете использовать explode_outer().

Если вы хотите, чтобы значения нескольких развернутых массивов совпадали в строках, вы можете работать с posexplode(), а затем filter() со строками, в которых позиции соответствуют.

@restlessmodern Мне нужно, чтобы значения этих двух столбцов разделялись в соответствии друг с другом. 1-е значение col2 должно быть сопоставлено с 1-м значением col3; 2-е значение col2 должно быть сопоставлено со 2-м значением col3

Vineeth Reddy 13.05.2022 20:16

@VineethReddy Я обновил свой ответ возможным решением.

restlessmodem 13.05.2022 20:28
Ответ принят как подходящий

Ниже код работает отлично


data = [(1,'12;34;56', 'Aus;SL;NZ'),
        (2,'31;54;81', 'Ind;US;UK'),
        (3,None, 'Ban'),
        (4,'Ned', None) ]
  
columns = ['Id', 'Score','Countries']
df = spark.createDataFrame(data, columns) 
#df.show()

df2=df.select("*",posexplode_outer(split("Countries",";")).alias("pos1","value1"))
#df2.show()

df3=df2.select("*",posexplode_outer(split("Score",";")).alias("pos2","value2"))
#df3.show()

df4=df3.filter((df3.pos1==df3.pos2) | (df3.pos1.isNull() | df3.pos2.isNull()))
df4=df4.select("Id","value2","value1")
df4.show()  #Final Output 

Другие вопросы по теме