zoukankan      html  css  js  c++  java
  • Spark2 Can't write dataframe to parquet hive table : HiveFileFormat`. It doesn't match the specified format `ParquetFileFormat`.

    一、概述

      出现该问题的原因是因为 如果用命令行创建的hive表,会根据hive的hive.default.fileformat,这个配置来规定hive文件的格式,其中fileformat一般有4中,分别是TextFile、SequenceFile、RCFile、ORC。默认情况下,不指定的话,是TextFile。那么如何在hive建表的时候指定呢? 就在建表语句最后加上stored as TextFile 或者stored as RCFile等等就可以了。

        但是df.write默认的format是parquet + snappy。如果表是用hive命令行创建的,就不符合格式,所以就会报错。如果表是提前不存在的,那么就不会有什么问题。

    二、解决方法

     1、将parquet换成hive

    .toDF()
    .repartition($"col", $"col2", $"col3", $"col4")
    .write
    .format("parquet")
    .mode(saveMode)
    .partitionBy("col", "col2", "col3", "col4")
    .saveAsTable("db.demo")

     2、方法二

      其实,还可以一种方式,就是使用insertInto,但是不太建议。因为在insertInto源码中,这样写道:

      insertInto插入的时候,是根据列的位置插入,而不是根据列的名字。表的format和设置的options也会被忽略。所以不是很推荐,但是也能达到目标。

    df.write.insertInto("db.demo")
  • 相关阅读:
    linux inode索引节点使用率100% 解决
    Linux常用命令
    mongodb常用命令
    抓包工具简介:fiddler、charles
    博客园自定义更换背景
    ant+jmeter应用
    BeanShell断言
    jmeter 常用函数(一):__Random
    git常见错误解决方法
    react环境搭建
  • 原文地址:https://www.cnblogs.com/chhyan-dream/p/13454643.html
Copyright © 2011-2022 走看看