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

时间:2017-07-17 10:12:53

标签: json scala apache-spark spark-dataframe

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

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

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

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

我的主要问题是,如果数值是整数还是长数,火花如何决定?我有什么办法可以强制执行所有\某些数字是特定类型的吗?

谢谢!

1 个答案:

答案 0 :(得分: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))
}

这只是一个片段,但这样的事情可以帮助你:)