我有一個 bash 檔案,它需要一個大的 csv,并根據這個博客https://medium.com/swlh/automatic-s3-file-splitter-620d04b6e81c將 csv 拆分成更小的 csv 。它運行良好,因為它從不下載非常適合 lambda 的 csv。拆分后的 csv 沒有標題,只有原始 csv。這對我來說是個問題,因為我無法使用 apache pyspark 讀取一組帶有標題行的檔案和許多其他沒有標題行的檔案。
我想為每個寫入的 csv 添加一個標題行。
代碼的作用
檔案
- “s3//測驗桶/test.csv”
OUTFILES - 分成 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”
有效的原始代碼
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\""))
嘗試2:
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 -n ${HEADER}; aws s3 cp - \"${OUTFILE}_\$FILE.csv\"; } | echo \"\$FILE.csv\""))
AWS 檔案狀態
您可以使用 dash 引數將檔案流式傳輸到標準輸入 (stdin) 或標準輸出 (stdout)。
我不知道這是否可以通過打開的檔案流實作。
uj5u.com熱心網友回復:
希望這可以幫助。我認為您只是缺少cat
添加標題的方面。
本文展示了一種拆分檔案并使用split
命令和filter
引數提供標頭的方法。
使用該片段并將其應用于上面的代碼似乎可行。請注意,花括號內的 2 個命令是echo ${HEADER}
和cat
。第一個echo
在標準輸出上創建標頭,然后第二個cat
將標準輸入通過管道aws cp
傳輸到標準輸出,標準輸出是aws cp -
在 S3 上創建新檔案的輸入。
HEADER='"Name", "Team", "Position", "Height(inches)", "Weight(lbs)", "Age"'
aws s3 cp ${INFILE} - | split -d -l ${LINECOUNT} --filter "{ \[ "\$FILE" != "x00" \] && echo ${HEADER} ; cat; } | aws s3 cp - \"${OUTFILE}\${FILE}.csv\""
運行命令后,我觀察到 3 個新檔案,每個檔案都有所需的標題。
head -n2 *.csv
==> x00.csv <==
"Name", "Team", "Position", "Height(inches)", "Weight(lbs)", "Age"
"Adam Donachie", "BAL", "Catcher", 74, 180, 22.99
==> x01.csv <==
Name, Team, Position, Height(inches), Weight(lbs), Age
"John Rheinecker", "TEX", "Starting Pitcher", 74, 230, 27.76
==> x02.csv <==
Name, Team, Position, Height(inches), Weight(lbs), Age
"Chase Utley", "PHI", "Second Baseman", 73, 183, 28.2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/507310.html
下一篇:ubuntu終端打不開