निम्नलिखित PySpark DataFramePyspark में तिथियों के कॉलम से दिनों के कॉलम को घटाना कैसे?
df = sqlContext.createDataFrame([('2015-01-15', 10),
('2015-02-15', 5)],
('date_col', 'days_col'))
कैसे दिनों स्तंभ तारीख स्तंभ से घटाया जा सकता को देखते हुए? इस उदाहरण में, परिणामी कॉलम ['2015-01-05', '2015-02-10']
होना चाहिए।
मैंने pyspark.sql.functions.date_sub()
में देखा, लेकिन इसके लिए दिनांक कॉलम और एक दिन की आवश्यकता है, यानी date_sub(df['date_col'], 10)
। आदर्श रूप में, मैं date_sub(df['date_col'], df['days_col'])
करना पसंद करूंगा।
मैं भी एक यूडीएफ बनाने की कोशिश की:
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'])
यह तकनीकी रूप से काम करता है, लेकिन मैं पढ़ा है कि स्पार्क और अजगर के बीच कदम बड़े डेटासेट के लिए प्रदर्शन के मुद्दों पैदा कर सकता है। मैं अभी इस समाधान के साथ रह सकता हूं (समय से पहले अनुकूलित करने की आवश्यकता नहीं है), लेकिन मेरा आंत कहता है कि पाइथन यूडीएफ के बिना इस साधारण चीज़ को करने का एक तरीका बन गया है।
यदि आपको एसक्यूएल टाइप करने में कोई फर्क नहीं पड़ता है तो आप वास्तव में इसे 'df.select (expr ("date_sub ({0}, {1})" में सरल बना सकते हैं। प्रारूप ("date_col", "days_col"))' जो बनाता है लिखना तुच्छ है। – zero323