मेरे पास एक पांडा डेटाफ्रेम है जिसे मैं एचडीएफएस में एक टेबल पर लिख रहा हूं। जब Srum_Entry_Creation StringType() है, तो मैं एक टेबल पर डेटा लिख ​​सकता हूं, लेकिन मुझे इसे TimestampType() होना चाहिए। यहीं पर मैं TypeError: TimestampType can not accept object '2019-05-20 12:03:00' in type <class 'str'> या TypeError: TimestampType can not accept object 1558353780000000000 in type <class 'int'> में दौड़ रहा हूं। मैंने स्कीमा को परिभाषित करने से पहले कॉलम को पाइथन में अलग-अलग दिनांक प्रारूपों में परिवर्तित करने का प्रयास किया है, लेकिन ऐसा लगता है कि आयात काम करने के लिए मिल सकता है।

df
    Srum_Entry_ID   Connected_Time  Machine     Srum_Entry_Creation
0   5769.0          0.018218        Computer1   2019-05-20 12:03:00
1   5770.0          0.000359        Computer1   2019-05-20 12:03:00
2   5771.0          0.042674        Computer2   2019-05-20 13:03:00
3   5772.0          0.043229        Computer2   2019-05-20 14:04:00
4   5773.0          0.032222        Computer3   2019-05-20 14:04:00

spark = SparkSession.builder.appName('application').getOrCreate()
schema = StructType([StructField('Srum_Entry_ID', FloatType(), False),
                     StructField('Connected_Time', FloatType(), True),
                     StructField('Machine', StringType(), True),
                     StructField('Srum_Entry_Creation', TimestampType(), True)])
dataframe = spark.createDataFrame(df, schema)
dataframe.write. \
  mode("append"). \
  option("path", "/user/hive/warehouse/analytics.db/srum_network_connections"). \
  saveAsTable("analytics.srum_network_connections")

मैं प्रयास कर चुका हूं:

df['Srum_Entry_Creation'] = df['Srum_Entry_Creation'].astype('datetime64[ns]')

त्रुटि: TypeError: TimestampType can not accept object 1558353780000000000 in type <class 'int'>

और

df['Srum_Entry_Creation'] = pd.to_datetime(df['Srum_Entry_Creation'])

त्रुटि: TypeError: TimestampType can not accept object 1558353780000000000 in type <class 'int'>

और अगर मैं इसे सिर्फ पांडा डेटाफ्रेम में एक स्ट्रिंग के रूप में छोड़ देता हूं तो मुझे मिलता है:

त्रुटि: TypeError: TimestampType can not accept object '2019-05-20 12:03:00' in type <class 'str'>

4
sectechguy 22 जुलाई 2019, 19:18

1 उत्तर

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

संक्षेप में मैंने डेटाटाइम को युग के समय में बदल दिया

df['epoch'] = (df['New_Srum_Entry_Creation'] - dt.datetime(1970,1,1)).dt.total_seconds()
df['epoch'] = df['epoch'].astype('Int64')

फिर स्कीमा के लिए इंटेगर टाइप () का इस्तेमाल किया

StructField('epoch', IntegerType(),True)
1
sectechguy 22 जुलाई 2019, 21:52