DateType()定义在PySpark中是否为Null?

时间:2018-09-01 02:30:43

标签: pyspark

我有一些大尾数的日期,例如: CSV中为YYYYMMDD。

当我使用简单的字符串类型时,数据会正确加载,但是当我使用DateType()对象定义列时,所有内容都将为null。我是否可以在某个地方定义日期格式,还是Spark应该自动推断日期格式?

schema_comments= StructType([
    StructField("id", StringType(), True),
    StructField("date", DateType(), True),
])

2 个答案:

答案 0 :(得分:1)

该方案对我来说很好。
您可以使用dateFormat定义spark如何读取CSV。

例如:

rc = spark.read.csv('yourCSV.csv', header=False,
                    dateFormat="yyyyddMM", schema=schema)

答案 1 :(得分:0)

DateType期望使用spark中的标准时间戳格式,因此,如果以架构形式提供,则应采用1997-02-28 10:30:00的格式,如果不是这种情况,请使用pandas或pyspark以字符串格式阅读,然后您可以使用python和pyspark将其转换为DateType()对象。下面是将YYYYMMDD格式转换为pyspark中的DateType的示例代码:

from pyspark.sql.functions import unix_timestamp

df2 = df.select('date_str', from_unixtime(unix_timestamp('date_str', 'yyyyMMdd')).alias('date'))