我正在使用spark2.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文件。问题是,如果在插入之后查询配置单元表,配置单元将无法识别此数据。您知道有没有一种方法可以直接在配置单元元存储中编写分区文件,并通过配置单元表使它们可用?
2条答案
按热度按时间vjhs03f71#
调试步骤:
1 . 检查配置单元表使用的文件类型
并选中“存储为”。。为了提高效率,将您的输出保存在parquet和分区位置(您可以在上面查询的“location”中看到)…如果有任何其他特定类型,请将文件创建为该类型。
2 . 如果要在任何分区中保存数据并手动创建分区文件夹,请避免这样做。。使用创建分区
3.在spark中创建输出文件后。。您可以重新加载这些文件并检查“\u corrupt\u record”(您可以打印Dataframe并检查此项)
9avjhtql2#
除此之外,我还发现命令“msck repair table”会自动发现配置单元表文件夹中的新分区