我正在导入数据,该数据具有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
。谁能解释这个异常?