我的数据仓库中有许多 Parquet 文件。一些早期的文件 ~700 将列的架构类型设置为字符串,而它们本应为 int32。了解 Parquet 是不可变的;我正在寻找使用正确的列类型重写这些文件的最佳方法。我将 Ruby 与红色镶木地板宝石一起使用。
我尝试将列转换为 int,然后将文件保存到新位置。它没有错误,但不起作用。我在下面概述了我正在使用的方法。任何帮助将不胜感激。
def castCol(col = nil)
filesWritten = 0
getParquets.each do |file|
table = Arrow::Table.load(file)
if table.heading.data_type == "string"
newFileLoc = @saveDir + File.path(file)
puts newFileLoc
# Create Dir if Required
unless File.directory?(File.dirname(newFileLoc))
FileUtils.mkdir_p(File.dirname(newFileLoc))
end
table.heading.cast('int32')
table.save(newFileLoc)
filesWritten += 1
end
end
puts "Numebr of File Written: #{filesWritten}"
end
我已经用 Python 编写了转换。 PyArrow 库有更好的文档记录,这可能是预期的。