Ich habe eine Python-Pandas Datenrahmen (pd_df) wie folgt:Pandas Datenrahmen (DatetimeIndex Spalte) funken Datenrahmen (Datumzeit-Format)
time count
0 2015-01-31 835
1 2015-02-28 1693
2 2015-03-31 2439
, die ich umwandeln möchten Funke Datenrahmen (sp_df). Ich verwende den folgenden Befehl ein:
Als ich
sp_df = sqlContext.createDataFrame(pd_df).
Die erste Spalte wurde versucht, in Bigint Format zurückgegeben.
time count
1422662400000000000 835
1425081600000000000 1693
Ich habe auch versucht, das Schema wie folgt aber es hat nicht funktioniert entweder:
from pyspark.sql.types import *
schema = StructType([
StructField("time", StringType(), True),
StructField("count", IntegerType(), True)])
sp_df = sqlContext.createDataFrame(pd_df, schema)
Es mir den Fehler gab:
DateType can not accept object 1422662400000000000L in type <type 'long'>
Kann jemand empfehlen, mir den richtigen Weg zu TU es?
Der Grund dies geschieht, weil Ihr Pandas Dataframe Spalte hat den Datentyp 'DatetimeIndex' und wenn Sie [die Dokumentation] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DatetimeIndex.html) lesen, können Sie das Datum sehen intern als int64 dargestellt. Versuchen Sie, Ihre Datenstrings zu erstellen und konvertieren Sie sie dann in sp_df mit dem Datentyp 'DateType' –
. Warum geben Sie in Ihrem 'StructField'-Objekt auch' time ', StringType(), True'? Warum nicht 'DateType()' verwenden? –
Danke @KatyaHandler ..Die Idee der Umwandlung der Datetime in Strings half. Im StructField-Objekt wurde früher, als ich "time" übermittelte, als DateType() ein Fehler angezeigt. Jetzt, nach dem Konvertieren der Pandas Datetime in String und dann konvertiert es mit dem DateType() in StructField() gearbeitet. – aditya