#apache-spark #pyspark
Вопрос:
У меня есть дата, и я хочу создать новые атрибуты на основе этой даты. Например.
date quarter1 quarter2 quarter3 quarter4
2/3/2020(mm/dd/yyyy) 1 0. 0. 0
11/11/2020 0 0 0 1
Ответ №1:
Вы можете попробовать привести столбец даты и использовать quarter
функцию, а затем применить условие когда в противном случае для создания столбцов:
from pyspark.sql import functions as F
qtrs = ['quarter1','quarter2','quarter3','quarter4']
df = df.select("*",F.concat(F.lit("quarter"),
F.quarter(F.to_date("date",'M/d/yyyy'))).alias("quarters"))
.select("*",*[F.when(F.col("quarters")==col,1).otherwise(0).alias(col) for col in qtrs])
.drop("quarters")
df.show()
---------- -------- -------- -------- --------
| date|quarter1|quarter2|quarter3|quarter4|
---------- -------- -------- -------- --------
| 2/3/2020| 1| 0| 0| 0|
|11/11/2020| 0| 0| 0| 1|
---------- -------- -------- -------- --------
По запросу ОП, добавив подход с withColumn
:
df = (df.withColumn("quarters",F.concat(F.lit("quarter"),
F.quarter(F.to_date("date",'M/d/yyyy'))))
.withColumn("quarter1",F.when(F.col("quarters")=='quarter1',1).otherwise(0))
.withColumn("quarter2",F.when(F.col("quarters")=='quarter2',1).otherwise(0))
.withColumn("quarter3",F.when(F.col("quarters")=='quarter3',1).otherwise(0))
.withColumn("quarter4",F.when(F.col("quarters")=='quarter4',1).otherwise(0))
.drop("quarters")
)
df.show()
Комментарии:
1. Как реализовать использование столбца df.withColumn и удалить столбец «четверти»!?
2. Я пытаюсь добавить этот существующий фрейм данных df !?
3. @Thedatageek 1: Для удаления столбца «четверти» просто добавьте
.drop('quarters')
в конце кода. 2: Использование select с циклом здесь лучше, чем писать 4.withColumn
строки. 3: Фреймы данных Spark являются неизменяемыми , что означает , что вы можете создать копию только с дополнительными столбцами и не можете изменять существующий фрейм данных, если хотите назначить его существующей переменной,df=....
аout=...
не в коде4. Как добавить к существующему df??
5. У меня уже есть df фрейма данных с другими столбцами,как добавить это в этот df?