自动铸造实木复合地板到Hive

时间:2017-05-11 00:22:08

标签: apache-spark types hive

我有一个场景,其中spark从输入文件中推断出架构,并使用整数数据类型编写镶木地板文件。

但我们在配置单元中有表,其中字段被定义为BigInt。现在没有从int转换为long和hive抛出错误,它无法将Integer转换为Long。我无法将Hive DDL编辑为Integer数据类型,因为业务要求将这些字段设置为Long。 我已经查找了保存前我们可以转换数据类型的选项。这可以完成,除了我有数百列和显式转换使代码非常混乱。

有没有办法告诉自动转换数据类型的火花。

1 个答案:

答案 0 :(得分:0)

从Spark 1.4版开始,您可以在列上应用带有DataType的强制转换方法:

假设dataframe df具有列年份:Long

import org.apache.spark.sql.types.IntegerType
val df2 = df.withColumn("yearTmp", df.year.cast(IntegerType))
    .drop("year")
    .withColumnRenamed("yearTmp", "year")

如果您使用的是sql表达式,您也可以这样做:

val df2 = df.selectExpr("cast(year as int) year", 
                        "make", 
                        "model", 
                        "comment", 
                        "blank")

有关详细信息,请查看文档:{​​{3}}

相关问题