我有一些大尾数的日期,例如: CSV中为YYYYMMDD。
当我使用简单的字符串类型时,数据会正确加载,但是当我使用DateType()对象定义列时,所有内容都将为null。我是否可以在某个地方定义日期格式,还是Spark应该自动推断日期格式?
schema_comments= StructType([
StructField("id", StringType(), True),
StructField("date", DateType(), True),
])
答案 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'))