在 Hive 表 hdfs 文件夹中写入文件,并使其可从 Hive 查询



我正在使用Spark 2.2.1,它有一个有用的选项来指定我要在文件的每个分区中保存多少条记录;此功能允许避免在写入文件之前重新分区。 但是,此选项似乎只能用于FileWriter接口,而不能用于DataFrameWriter接口: 这样,该选项将被忽略

df.write.mode("overwrite")
.option("maxRecordsPerFile", 10000)
.insertInto(hive_table)

虽然以这种方式工作

df.write.option("maxRecordsPerFile", 10000)
.mode("overwrite").orc(path_hive_table)

所以我直接在指定表的 HiveMetastore 文件夹中写入 orc 文件。问题是,如果我在插入后查询 Hive 表,则 Hive 无法识别此数据。 是否知道是否有办法在 Hive 元存储中直接写入分区文件,并使它们也通过 Hive 表可用?

调试步骤:

1 .检查配置单元表使用的文件类型

Show create table table_name

并选中"存储为"。 为了提高效率,将您的输出保存在镶木地板和分区位置上(您可以在上面查询的"LOCATION"中看到(。如果存在任何其他特定类型,请创建该类型的文件。

阿拉伯数字。如果您将数据保存在任何分区中并手动创建分区文件夹,请避免这种情况..使用 创建分区

alter table {table_name} add partition ({partition_column}={value});

3 .在火花中创建输出文件后..您可以重新加载它们并检查"_corrupt_record"(您可以打印数据帧并检查此内容(

除此之外,我还发现命令"MSCK 修复表"会自动发现 Hive 表文件夹中的新分区

最新更新