我正在尝试遵循Databricks
Academy Spark SQL课程,并且正在Databricks
社区版中进行练习。在某个时候,我需要从CSV创建一个表。 This is CSV link.
我正在尝试使用UI创建表。我正在检查“第一行是标题”和“推断模式”框。 birthDate
字段在预览窗格中显示为字符串。根据课程资料,它应该是时间戳记。但是,如果我将字段类型更改为Timestamp,则将使用空值加载数据。如果我将birthDate
字段保留为原来的(String
),则表示数据正在正确加载。
如何处理此问题?
在birthDate
字段中采样数据:
1999-09-13T04:00:00.000 + 0000
答案 0 :(得分:1)
inferSchema
的 yyyy-MM-dd'T'HH:mm:ss.SSSXXX
,并且XXX
模式与following specification of the timezone:Z; -08; -0830; -08:30; -083015; -08:30:15;
匹配,但不匹配匹配您的数据。
要解决此问题,您可以恢复为通过笔记本创建表,并添加以下选项以指定时间戳格式:.option("timestampFormat", "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
,整个读取命令将如下所示:
df = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.option("timestampFormat", "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
.load(path_to_file)
另一种可能性是加载数据,然后在必要的列上使用to_timestamp
-与CSV infrerSchema
相比,它具有更好的自动检测功能:
from pyspark.sql.functions import to_timestamp, col
df = spark.read.format("csv")
.option("inferSchema", "true")
.option("header", "true")
.load(path_to_file)
.withColumn("birthDate", to_timestamp(col("birthDate")))