web-dev-qa-db-ja.com

寄木細工のファイルをcsvにコピーおよび変換する方法

Hdfsファイルシステムにアクセスでき、寄木細工のファイルを表示できます

hadoop fs -ls /user/foo

これらの寄木細工のファイルをローカルシステムにコピーし、csvに変換して使用できるようにするにはどうすればよいですか?ファイルは、行ごとにいくつかのフィールドを持つ単純なテキストファイルである必要があります。

7
eleanora

試す

df = spark.read.parquet("/path/to/infile.parquet")
df.write.csv("/path/to/outfile.csv")

関連するAPIドキュメント:

/path/to/infile.parquet/path/to/outfile.csvの両方がhdfsファイルシステム上の場所である必要があります。 hdfs://...を明示的に指定するか、通常はデフォルトのスキームであるため省略できます。

ローカルファイルはクラスタ内のすべてのマシンで異なるファイルを意味するため、file://...の使用は避けてください。代わりにHDFSに出力し、コマンドラインを使用して結果をローカルディスクに転送します。

hdfs dfs -get /path/to/outfile.csv /path/to/localfile.csv

または、HDFSから直接表示します。

hdfs dfs -cat /path/to/outfile.csv
13
Zoltan

パーケットファイルの名前が正確にわからない場合があるため、より動的なフォームのスニペットは次のようになります。

for filename in glob.glob("[location_of_parquet_file]/*.snappy.parquet"):
        print filename
        df = sqlContext.read.parquet(filename)
        df.write.csv("[destination]")
        print "csv generated"
3
Yusuf Hassan

Hiveでこれらの寄木細工のファイルに定義されたテーブルがある場合(または自分でそのようなテーブルを定義した場合)、そのテーブルでHiveクエリを実行し、結果をCSVファイルに保存できます。次のように試してください。

ローカルディレクトリを上書きして挿入 dirname
 '、'で終了する行フォーマット区切りフィールド
選択*から テーブル名; 

dirnametablenameを代入します実際の値で。指定したディレクトリ内の既存のコンテンツはすべて削除されることに注意してください。詳細は クエリからデータをファイルシステムに書き込む を参照してください。

3
Zoltan