1

我正在使用 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 表使它们也可用?

4

2 回答 2

1

调试步骤:

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

Show create table table_name

并检查“存储为”..为了提高效率,将您的输出保存在镶木地板和分区位置(您可以在上述查询的“位置”中看到)..如果有任何其他特定类型,则创建该类型的文件。

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

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

3.在spark中创建输出文件后..您可以重新加载这些文件并检查“_corrupt_record”(您可以打印数据框并检查这个)

于 2018-06-06T11:18:02.823 回答
0

除此之外,我还发现命令“MSCK REPAIR TABLE”会自动发现 hive 表文件夹中的新分区

于 2018-06-12T09:34:18.187 回答