PySpark-日期0000.00.00通过函数.to_date()和.csv()模块导入的方式不同

时间:2019-02-08 09:57:53

标签: python date pyspark

我正在导入数据,该数据具有date格式的yyyy.MM.dd列。缺少的值已标记为0000.00.00。根据将数据导入0000.00.00所采用的功能/模块,对dataframe的处理方式有所不同。

.csv文件看起来像这样-

2016.12.23,2016.12.23
0000.00.00,0000.00.00

方法1: .csv()

schema = StructType([
                StructField('date', StringType()),
                StructField('date1', DateType()),
        ])
df = spark.read.schema(schema)\
                    .format('csv')\
                    .option('header','false')\
                    .option('sep',',')\
                    .option('dateFormat','yyyy.MM.dd')\
                    .load(path+'file.csv')
df.show()
+----------+----------+
|      date|     date1|
+----------+----------+
|2016.12.23|2016-12-23|
|0000.00.00|0002-11-30|
+----------+----------+

方法2: .to_date()

from pyspark.sql.functions import to_date, col 
df = sqlContext.createDataFrame([('2016.12.23','2016.12.23'),('0000.00.00','0000.00.00')],['date','date1']) 
df = df.withColumn('date1',to_date(col('date1'),'yyyy.MM.dd')) 
df.show()
+----------+----------+
|      date|     date1|
+----------+----------+
|2016.12.23|2016-12-23|
|0000.00.00|      null|
+----------+----------+

问题:为什么两种方法给出的结果不同?我本来期望两者都得到Null。在第一种情况下,我得到0002-11-30。谁能解释这个异常?

0 个答案:

没有答案