Apache spark 自动浇铸镶木地板到蜂巢

Apache spark 自动浇铸镶木地板到蜂巢,apache-spark,types,hive,Apache Spark,Types,Hive,我有一个场景,spark从输入文件推断模式,并使用整数数据类型写入拼花地板文件 但是我们在配置单元中有表,其中字段定义为BigInt。目前还没有从int到long的转换,并且hive抛出了无法将Integer转换为long的错误。我无法将配置单元DDL编辑为整数数据类型,因为业务要求这些字段的长度为。 我已经找到了一个选项,在保存之前可以强制转换数据类型。这是可以做到的,只是我有数百列,显式强制转换使代码非常混乱 有没有办法告诉spark自动转换数据类型。自spark 1.4版以来,您可以在列上

我有一个场景,spark从输入文件推断模式,并使用整数数据类型写入拼花地板文件

但是我们在配置单元中有表,其中字段定义为BigInt。目前还没有从int到long的转换,并且hive抛出了无法将Integer转换为long的错误。我无法将配置单元DDL编辑为整数数据类型,因为业务要求这些字段的长度为。 我已经找到了一个选项,在保存之前可以强制转换数据类型。这是可以做到的,只是我有数百列,显式强制转换使代码非常混乱


有没有办法告诉spark自动转换数据类型。

自spark 1.4版以来,您可以在列上应用数据类型转换方法:

假设dataframe df具有列year: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")

有关更多信息,请查看文档:

@HimatejaMadala:如果答案对您有效,请确保答案正确