csv - databricks CSV导入时间戳NULL问题
问题描述
我正在尝试Databricks
学习 Academy Spark SQL 课程,并且正在Databricks
社区版中练习。有时,我需要从 CSV 创建一个表。这是 CSV 链接。
我正在尝试使用 UI 创建表。我正在检查“第一行是标题”和“推断架构”框。birthDate
字段在预览窗格中显示为字符串。根据课程材料,它应该是时间戳。但是,如果我将字段类型更改为时间戳,则数据将加载空值。如果我将birthDate
字段保持原样 ( String
),则数据正在正确加载。
我该如何处理这个问题?
字段中的示例数据birthDate
:
1999-09-13T04:00:00.000+0000
解决方案
inferSchema
对于 CSV 文件,需要特定格式的数据: yyyy-MM-dd'T'HH:mm:ss.SSSXXX
,并且该XXX
模式与以下时区规范匹配: 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")))
推荐阅读
- c# - ASP.NET Core 回归
- mongodb - mongodb 无法在 opensuse 中启动
- php - 连接 3 个表并匹配空条目
- docker - 无法从 jenkins docker 容器内部连接到 redis docker 容器
- r - R保存在函数中,保留原始输入名称
- django - 使用与函数 update() django 相同的字段更新模型中的字段
- powershell - 列出每个直接下属的集团成员资格
- firebase-cloud-messaging - 如何从现有的 FCM 令牌中获取 APNS 令牌?
- jsf - 错误 404,ajax 事件 itemSelect Primefaces 5.2
- html - 基于认证安全问题的条件渲染