このブログに従って、大きなcsvを取得し、csvをより小さなcsvに分割するbashファイルがあります。https://medium.com/swlh/automatic-s3-file-splitter-620d04b6e81c。スピードが速く、csvをダウンロードする必要がないので、うまく動作します。これはラムダに適しています。分割CSVにはヘッダーがなく、元のCSVのみがあります。これはApache pysparkを使用してヘッダー行があるファイルセットとヘッダー行がない他の多くのファイルを読み取ることができないために問題になります。
作成された各CSVにヘッダー行を追加したいと思います。
コードの機能
内部ファイル
- "s3 //テストバケット/test.csv"
アウトファイル - 300Kラインに分割
- "s3//dest-test-bucket/test.00.csv"
- "s3//dest-test-bucket/test.01.csv"
- "s3//dest-test-bucket/test.02.csv"
- "s3//dest-test-bucket/test.03.csv"
ダッシュパラメータを使用して、ファイルを標準入力(stdin)または標準出力(stdout)にストリーミングできます。
オープンファイルストリームでこれが可能かどうかわかりません。
有効なソースコード
LINECOUNT=300000
INFILE=s3://"${S3_BUCKET}"/"${FILENAME}"
OUTFILE=s3://"${DEST_S3_BUCKET}"/"${FILENAME%%.*}"
FILES=($(aws s3 cp "${INFILE}" - | split -d -l ${LINECOUNT} --filter "aws s3 cp - \"${OUTFILE}_\$FILE.csv\" | echo \"\$FILE.csv\""))
これは発信ファイルストリームに変数を追加しようとしましたが、うまくいきません。
LINECOUNT=300000
INFILE=s3://"${S3_BUCKET}"/"${FILENAME}"
OUTFILE=s3://"${DEST_S3_BUCKET}"/"${FILENAME%%.*}"
HEADER=$(aws s3 cp "${INFILE}" - | head -n 1)
FILES=($(aws s3 cp "${INFILE}" - | split -d -l ${LINECOUNT} --filter "echo ${HEADER}; aws s3 cp - \"${OUTFILE}_\$FILE.csv\" | echo \"\$FILE.csv\""))