मैं दो दो टाइमस्टैम्प मानों के बीच समय में अंतर की गणना करने वाला एक कॉलम जोड़ना चाहता हूं। ऐसा करने के लिए मैं पहले वर्तमान डेटाटाइम के साथ एक कॉलम जोड़ता हूं जिसे यहां current_datetime के रूप में परिभाषित किया गया है:

import datetime
#define current datetime
now = datetime.datetime.now()
#Getting Current date and time
current_datetime=now.strftime("%Y-%m-%d %H:%M:%S")
print(now)

तो मैं df में कॉलम मान के रूप में current_datetime जोड़ना चाहता हूं और अंतर की गणना करना चाहता हूं

import pyspark.sql.functions as F

productsDF = productsDF\
.withColumn('current_time', when(col('Quantity')>1, current_datetime))\
.withColumn('time_diff',\
    (F.unix_timestamp(F.to_timestamp(F.col('current_time')))) - 
    (F.unix_timestamp(F.to_timestamp(F.col('Created_datetime'))))/F.lit(3600)
)

हालांकि आउटपुट केवल शून्य मान है।

productsDF.select('current_time','Created_datetime','time_diff').show()

+------------+-------------------+---------+
|current_time|   Created_datetime|time_diff|
+------------+-------------------+---------+
|        null|2019-10-12 17:09:18|     null|
|        null|2019-12-03 07:02:07|     null|
|        null|2020-01-16 23:10:08|     null|
|        null|2020-01-21 15:38:39|     null|
|        null|2020-01-21 15:14:55|     null|

नए कॉलम टाइप स्ट्रिंग और डबल के साथ बनाए गए हैं:

 |-- current_time: string (nullable = true)
 |-- diff: double (nullable = true)
 |-- time_diff: double (nullable = true)

मैंने केवल परीक्षण करने के लिए स्ट्रिंग और शाब्दिक मानों के साथ कॉलम बनाने का प्रयास किया, लेकिन आउटपुट हमेशा null होता है। मैं क्या खो रहा हूँ?

0
Jack Someone 14 अक्टूबर 2020, 23:21

1 उत्तर

सबसे बढ़िया उत्तर

current_datetime वाले कॉलम को भरने के लिए, आप lit() फ़ंक्शन को मिस कर रहे हैं:

current_datetime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
productsDF = productsDF.withColumn("current_time", lit(current_datetime))

दो timestamp कॉलम के बीच समय अंतर की गणना के लिए, आप यह कर सकते हैं:

productsDF.withColumn('time_diff',(F.unix_timestamp('current_time') - 
    F.unix_timestamp('Created_datetime'))/3600).show()

संपादित करें:

घंटों, दिनों, महीनों और वर्षों में समय के अंतर के लिए, आप यह कर सकते हैं:

df.withColumn('time_diff_hours',(F.unix_timestamp('current_time') - F.unix_timestamp('Created_datetime'))/3600)\
    .withColumn("time_diff_days", datediff(col("current_time"),col("Created_datetime")))\
    .withColumn("time_diff_months", months_between(col("current_time"),col("Created_datetime")))\
    .withColumn("time_diff_years", year(col("current_time")) - year(col("Created_datetime"))).show()

+-------------------+-------------------+------------------+--------------+----------------+---------------+
|   Created_datetime|       current_time|   time_diff_hours|time_diff_days|time_diff_months|time_diff_years|
+-------------------+-------------------+------------------+--------------+----------------+---------------+
|2019-10-12 17:09:18|2020-10-15 02:45:49|  8841.60861111111|           369|     12.07743093|              1|
|2019-12-03 07:02:07|2020-10-15 02:45:49|7602.7283333333335|           317|     10.38135529|              1|
|2020-01-16 23:10:08|2020-10-15 02:45:49| 6530.594722222222|           273|      8.94031549|              0|
+-------------------+-------------------+------------------+--------------+----------------+---------------+

यदि आप सटीक समय अंतर चाहते हैं, तो:

df.withColumn('time_diff_hours',(F.unix_timestamp('current_time') - F.unix_timestamp('Created_datetime'))/3600)\
    .withColumn('time_diff_days',(F.unix_timestamp('current_time') - F.unix_timestamp('Created_datetime'))/(3600*24))\
    .withColumn('time_diff_years',(F.unix_timestamp('current_time') - F.unix_timestamp('Created_datetime'))/(3600*24*365)).show()

+-------------------+-------------------+------------------+------------------+------------------+
|   Created_datetime|       current_time|   time_diff_hours|    time_diff_days|   time_diff_years|
+-------------------+-------------------+------------------+------------------+------------------+
|2019-10-12 17:09:18|2020-10-15 02:45:49|  8841.60861111111| 368.4003587962963|1.0093160514967021|
|2019-12-03 07:02:07|2020-10-15 02:45:49|7602.7283333333335|316.78034722222225|0.8678913622526636|
|2020-01-16 23:10:08|2020-10-15 02:45:49| 6530.594722222222| 272.1081134259259|0.7455016806189751|
+-------------------+-------------------+------------------+------------------+------------------+
1
Cena 15 अक्टूबर 2020, 10:12