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

Lir*_*nBo 3 json scala apache-spark spark-dataframe

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

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

  • 手动更改架构
  • 使用 UDF 投射数据
  • 手动定义整个架构

问题是模式非常复杂,我所追求的字段是嵌套的,这使得上述所有选项都无关紧要,或者太复杂而无法从头开始编写。

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

谢谢!

T. *_*ęda 6

默认情况下始终为 LongType。

从源代码:

// For Integer values, use LongType by default.
case INT | LONG => LongType
Run Code Online (Sandbox Code Playgroud)

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

for (c <- schema.fields.filter(_.dataType.isInstanceOf[NumericType])) {
    df.withColumn(c.name, col(c.name).cast(IntegerType))
}
Run Code Online (Sandbox Code Playgroud)

这只是一个片段,但像这样的东西应该可以帮助你:)