json - spark无法推断java上的时间戳
问题描述
我正在尝试从 json-file (Spark 2.4.5) 推断模式
{
"timestampField":"08.06.2020 12:03:50"
}
StructType mySchema = spark.read()
.option("multiline", true)
.option("inferSchema", true)
.option("timestampFormat","MM.dd.yyyy HH:mm:ss")
.json("cdr_json_schema.json")
.schema();
root
|-- timestampField: string (nullable = true)
我尝试使用默认格式文件并在没有 option() 的情况下读取
{
"timestampField":"2020-08-06T12:03:50.412+03:00"
}
它仍然是字符串。
解决方案
timestampFormat
将用于时间戳列。要从 json 输入中识别时间戳列,您需要指定架构如下 -
val data =
"""
|{
|"timestampField":"08.06.2020 12:03:50"
|}
""".stripMargin
val df = spark.read.option("multiLine", true).json(Seq(data).toDS())
df.show(false)
df.printSchema()
/**
* +-------------------+
* |timestampField |
* +-------------------+
* |08.06.2020 12:03:50|
* +-------------------+
*
* root
* |-- timestampField: string (nullable = true)
*/
val df1 = spark.read
.schema(StructType(StructField("timestampField", DataTypes.TimestampType) :: Nil))
.option("multiLine", true)
.option("timestampFormat", "MM.dd.yyyy HH:mm:ss")
.json(Seq(data) toDS())
df1.show(false)
df1.printSchema()
/**
* +-------------------+
* |timestampField |
* +-------------------+
* |2020-08-06 12:03:50|
* +-------------------+
*
* root
* |-- timestampField: timestamp (nullable = true)
*/
推荐阅读
- javascript - FormBuilder - 自定义验证器 - 许多字段和承诺
- javascript - JavaScript:折叠无限流(生成器函数)
- java - 一切正常,但我不明白它是如何工作的?
- python - 所有 Flask 端点返回 404(未找到)
- javascript - Javascript比较两个数组并获取不匹配的值
- vba - 运行时错误 49,Excel/VBA 的 D 语言 DLL 中的错误 DLL 调用约定 - 我错过了什么?
- r - 无法安装软件包“DescTools”
- html - 添加具有相关 id=class 的悬停时表闪烁
- regex - 用变量中的多个空格替换单个空格
- c# - 如何在 C# 中基于给定宽度且无填充的文本生成图像