spark 如何从 JSON 推断数字类型?

Posted

技术标签:

【中文标题】spark 如何从 JSON 推断数字类型?【英文标题】:How does spark infers numeric types from JSON? 【发布时间】:2017-07-17 10:12:53 【问题描述】:

尝试从 JSON 文件创建 DataFrame,但是当我加载数据时,spark 会自动推断数据中的数值是 Long 类型,尽管它们实际上是整数,这也是我解析数据的方式我的代码。

由于我在测试环境中加载数据,我不介意使用一些变通方法来修复架构。我已经尝试了很多,例如:

手动更改架构 使用 UDF 转换数据 手动定义整个架构

问题是架构非常复杂,而且我所追求的字段是嵌套的,这使得上面的所有选项都不相关或太复杂而无法从头开始编写。

我的主要问题是,spark 如何确定数值是整数还是长整数?我能做些什么来强制所有\一些数字都是特定类型的吗?

谢谢!

【问题讨论】:

【参考方案1】:

默认情况下它总是 LongType。

来自源代码:

// For Integer values, use LongType by default.
case INT | LONG => LongType

所以你不能改变这种行为。您可以按列进行迭代,然后进行强制转换:

for (c <- schema.fields.filter(_.dataType.isInstanceOf[NumericType])) 
    df.withColumn(c.name, col(c.name).cast(IntegerType))

这只是一个 sn-p,但这样的东西应该可以帮助你:)

【讨论】:

以上是关于spark 如何从 JSON 推断数字类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何从以下架构中选择列“?

使用 Spark 访问嵌套在结构中的 json 数组

如何从 json 数据推断 Django 模型?

Spark结构化流式kafka在没有模式的情况下转换JSON(推断模式)

如何获取和使用从泛型推断的类型

sparkdataframe转换成字节流