У меня есть датафрейм Pandas. Я попытался сначала объединить два столбца, содержащих строковые значения, в список, а затем, используя zip, соединял каждый элемент списка с помощью _. Мой набор данных, как показано ниже:
df['column_1']: 'abc, def, ghi'
df['column_2']: '1.0, 2.0, 3.0'
Я хотел объединить эти два столбца в третьем столбце, как показано ниже для каждой строки моего информационного кадра.
df['column_3']: [abc_1.0, def_2.0, ghi_3.0]
Я успешно сделал это в python, используя приведенный ниже код, но фрейм данных довольно большой, и его запуск на весь фрейм данных занимает очень много времени. Я хочу сделать то же самое в PySpark для эффективности. Я успешно прочитал данные в spark dataframe, но мне трудно определить, как реплицировать функции Pandas с помощью эквивалентных функций PySpark. Как я могу получить желаемый результат в PySpark?
df['column_3'] = df['column_2']
for index, row in df.iterrows():
while index < 3:
if isinstance(row['column_1'], str):
row['column_1'] = list(row['column_1'].split(','))
row['column_2'] = list(row['column_2'].split(','))
row['column_3'] = ['_'.join(map(str, i)) for i in zip(list(row['column_1']), list(row['column_2']))]
Я преобразовал два столбца в массивы в PySpark, используя приведенный ниже код
from pyspark.sql.types import ArrayType, IntegerType, StringType
from pyspark.sql.functions import col, split
crash.withColumn("column_1",
split(col("column_1"), ",\s*").cast(ArrayType(StringType())).alias("column_1")
)
crash.withColumn("column_2",
split(col("column_2"), ",\s*").cast(ArrayType(StringType())).alias("column_2")
)
Теперь все, что мне нужно, - это сжать каждый элемент массива в двух столбцах, используя '_'. Как я могу использовать zip с этим? Любая помощь приветствуется.