Techioz Blog

RubyでParquetファイルの列タイプを変更する(Parquet Gemを使用)

概要

データ ウェアハウスには多数の Parquet ファイルがあります。以前のファイル ~700 の一部では、列のスキーマ タイプが int32 であるべきときに string に設定されています。 Parquet が不変であることを理解する。これらのファイルを正しい列タイプで書き直す最良の方法を探しています。私は赤い寄木細工の宝石を使用したルビーを使用しています。

列を 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 ライブラリはより適切に文書化されていますが、これはおそらく予想されることです。