1

私は大きなtsv形式のファイル(30GB)を持っています。私はそれらのすべてのデータをGoogleのbigqueryに変換する必要があります。だから私はファイルをより小さなチャンクに分割し、これらのチャンクファイルをすべてgzipしてGoogleのクラウドストレージに移動しました。その後、GCSからデータを読み込むためにgoogle bigquery APIを呼び出しています。しかし、私はエンコーディングエラーに直面している。linuxのcmdプロンプトを使ってUnicodeエンコーディングでファイルをgzipする方法は?

file_data.part_0022.gz: Error detected while parsing row starting at position: 0. Error: Bad character (ASCII 0) encountered. (error code: invalid) 

次のunixコマンドをPythonコードで分割およびgzipタスク用に使用しています。

cmd = [ 
      "split", 
      "-l", 
      "300000", 
      "-d", 
      "-a", 
      "4", 
      "%s%s" % (<my-dir>, file_name), 
      "%s/%s.part_" % (<my temp dir>, file_prefix) 
     ] 

code = subprocess.check_call(cmd) 
cmd = 'gzip %s%s/%s.part*' % (<my temp dir>,file_prefix,file_prefix) 
logging.info("Running shell command: %s" % cmd) 
code = subprocess.Popen(cmd, shell=True) 
code.communicate() 

ファイルが正常に分割さと(file_data.part_0001.gz、file_data.part_0002.gz、等。)をgzipedが、私は、これらのファイルをロードしようとすると、それが上記のエラーをスローしたBigQueryしています。私はそれがエンコードの問題だと思います。 分割やgzip操作中にファイルをエンコードする方法はありますか?明らかにあなたはユニコードを持っていると述べ

Error: Bad character (ASCII 0) encountered

:?あるいは我々は(ニシキヘビの方法)

答えて

-1

理由を行ずつ読み、Unicodeエンコードを行い、新しいgzipファイルに書き込むためにPythonのファイルオブジェクトを使用する必要があります(UTF-16)タブ文字があり、そこではデコードできません。 BigQueryサービスでは、UTF-8とlatin1のテキストエンコーディングのみがサポートされています。したがって、ファイルはUTF-8にエンコードされているはずです。


ソリューション:私はそれをテストしていません。 -aまたは--asciiフラグをgzipコマンドで使用してください。それはbigqueryによって解読されます。

関連する問題