У меня есть Python панд dataframe (pd_df) следующим образом:панды dataframe (колонка DatetimeIndex), чтобы зажечь dataframe (формат DateTime)
time count
0 2015-01-31 835
1 2015-02-28 1693
2 2015-03-31 2439
, который я хочу, чтобы преобразовать, чтобы зажечь dataframe (sp_df). Я использую следующую команду:
Когда я попытался
sp_df = sqlContext.createDataFrame(pd_df).
Первый столбец был возвращен в BigInt формате.
time count
1422662400000000000 835
1425081600000000000 1693
Я также попробовал схему следующим образом, но это не сработало:
from pyspark.sql.types import *
schema = StructType([
StructField("time", StringType(), True),
StructField("count", IntegerType(), True)])
sp_df = sqlContext.createDataFrame(pd_df, schema)
Он дал мне ошибку:
DateType can not accept object 1422662400000000000L in type <type 'long'>
Может кто-нибудь предложить мне правильный путь к сделай это?
Причина это происходит потому, что ваш В столбце dataframe pandas есть тип данных 'DatetimeIndex', и если вы читаете [документацию] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DatetimeIndex.html), вы можете видеть, что дата внутренне представлен как int64. Попробуйте сделать свои строки строк, а затем конвертируйте в sp_df с типом данных 'DateType' –
Также почему в вашем объекте' StructField' вы проходите время '', StringType(), True'? Почему бы не использовать 'DateType()'? –
Спасибо @ KatyaHandler. Идея преобразования даты и времени в строки помогла. В объекте StructField раньше, когда я проходил «время», как DateType(), я получал ошибку. Теперь, после преобразования pandas datetime в строку и затем преобразования его с использованием DateType() в StructField(). – aditya