Python TypeError:TimestampType无法接受对象<;类别';str'&燃气轮机;及<;类别';int'&燃气轮机;

Python TypeError:TimestampType无法接受对象<;类别';str'&燃气轮机;及<;类别';int'&燃气轮机;,python,pandas,pyspark,apache-spark-sql,Python,Pandas,Pyspark,Apache Spark Sql,我有一个熊猫数据帧,我正在HDFS中写入一个表。当Srum\u Entry\u Creation是StringType()时,我可以将数据写入表中,但我需要它是TimestampType()。这就是我遇到的TypeError:TimestampType不能接受type中的对象“2019-05-20 12:03:00”或TypeError:TimestampType不能接受type中的对象155835378000000000。在定义模式之前,我曾尝试用python将列转换为不同的日期格式,但似乎可

我有一个熊猫数据帧,我正在HDFS中写入一个表。当
Srum\u Entry\u Creation
StringType()
时,我可以将数据写入表中,但我需要它是
TimestampType()
。这就是我遇到的
TypeError:TimestampType不能接受type
中的对象“2019-05-20 12:03:00”或
TypeError:TimestampType不能接受type
中的对象155835378000000000。在定义模式之前,我曾尝试用python将列转换为不同的日期格式,但似乎可以让导入正常工作

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无法接受类型中的对象155835378000000000

df['Srum_Entry_Creation'] = pd.to_datetime(df['Srum_Entry_Creation'])
错误:
TypeError:TimestampType无法接受类型中的对象155835378000000000

如果我只是将其作为字符串保留在pandas数据帧中,我会得到:


错误:
TypeError:TimestampType无法接受类型中的对象“2019-05-20 12:03:00”
简而言之,我将日期时间转换为历元时间

df['epoch'] = (df['New_Srum_Entry_Creation'] - dt.datetime(1970,1,1)).dt.total_seconds()
df['epoch'] = df['epoch'].astype('Int64')
然后对架构使用IntegerType()

StructField('epoch', IntegerType(),True)

你试过用日期时间格式替换它吗?我试过df['Srum_Entry_Creation']=df['Srum_Entry_Creation'].astype('datetime64[ns]')和df['Srum_Entry_Creation']=pd.to_datetime(df['Srum_Entry_Creation']),错误是什么?相同吗?我把它们添加到问题@StevenIs it中作为一个选项,从spark将时间戳导出为字符串,然后再转换?我知道这有点痛,因为这意味着额外的转换,但如果它起作用?!或者可以使用
numpy.datetime64
代替
TimestampType()
,因为用作
TimestampType
的类似乎无法转换为使用imho的
numpy.timestamp64