gün sütun tarih sütununda düşülür nasıl aşağıdaki PySpark DataFrame Pyspark'taki bir tarih sütunundan günler bir sütun nasıl çıkarılır?
df = sqlContext.createDataFrame([('2015-01-15', 10),
('2015-02-15', 5)],
('date_col', 'days_col'))
Verilen? Bu örnekte, sonuç sütun
['2015-01-05', '2015-02-10']
olmalıdır.
pyspark.sql.functions.date_sub()
'a baktım, ancak bir tarih sütunu ve tek bir gün, yani date_sub(df['date_col'], 10)
gerektirir. İdeal olarak, date_sub(df['date_col'], df['days_col'])
yapmayı tercih ederim.
from datetime import timedelta
def subtract_date(start_date, days_to_subtract):
return start_date - timedelta(days_to_subtract)
subtract_date_udf = udf(subtract_date, DateType())
df.withColumn('subtracted_dates', subtract_date_udf(df['date_col'], df['days_col'])
Bu teknik olarak çalışır, ancak ben Spark ve Python arasındaki adım büyük veri setleri için performans sorunlarına neden olabilir okudum:
Ben de bir UDF oluşturma çalıştı. Şu an için bu çözüme sadık kalacağım (erken optimizasyona gerek yok), fakat bağırsağım, bu basit şeyi bir Python UDF kullanmadan yapmanın bir yolu olduğunu söyledi.
Eğer SQL yazmaktan sakıncası yoksa, aslında bunu df.select (expr ("date_sub ({0}, {1})". Format ("date_col", "days_col"))) 'e çevirebilirsiniz. oluşturmak için önemsiz. – zero323