【问题标题】:Auto Cast parquet to Hive自动将镶木地板浇铸到 Hive
【发布时间】:2017-05-11 12:48:09
【问题描述】:

我有一个场景,Spark 从输入文件推断架构并使用整数数据类型写入 parquet 文件。

但是我们在 hive 中有表,其中字段定义为 BigInt。现在没有从 int 到 long 的转换,并且 hive 会抛出无法将 Integer 转换为 Long 的错误。我无法将 Hive DDL 编辑为整数数据类型,因为将这些字段设为 Long 是业务要求。 我已经查找了我们可以在保存之前转换数据类型的选项。除了我有数百列并且显式转换使代码非常混乱之外,可以这样做。

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

【问题讨论】:

    标签: apache-spark types hive


    【解决方案1】:

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

    假设数据框 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")
    

    有关更多信息,请查看文档:http://spark.apache.org/docs/1.6.0/api/scala/#org.apache.spark.sql.DataFrame

    【讨论】:

    • @HimatejaMadala :如果它适合你,请让答案正确
    猜你喜欢
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2023-03-27
    相关资源
    最近更新 更多