홈>
큰 파일 (800k 행)에서 데이터를 가져 와서 람다 (AWS)를 통해 데이터베이스에 넣으려고합니다. 그렇게하려면 S3에서 xlsx 파일을 버퍼로 가져 와서 읽습니다.
module.exports.getSalesData = new Promise((resolve, reject) => {
getFileFromS3(filename)
.then(function (workbook) {
console.log(workbook.SheetNames[1]); // 'sales'
console.log(workbook.SheetNames); // showing sales as [ 'main', 'sales', 'Sheet1' ]
console.log(Array.isArray(workbook.SheetNames)); // true
console.log(typeof workbook.SheetNames); // Object
console.log(Object.keys(workbook.Sheets)); // [ 'main', 'Sheet1' ] == why 'sales' is not here?
var sheet_name = workbook.SheetNames[1]; // sales tab
var json_sheet = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name], { raw: true })
resolve(json_sheet)
})
.catch(err => {
console.log('File: ' + filename + ' doesn\'t exists on S3 or you\'re not connected to the internet.');
})
})
문제는
workbook.Sheets
입니다
나는
[ 'main', 'sales', 'Sheet1' ]
를 볼 수
맞습니까?
그런 다음과 같이 행 수 (이미 JSON으로 변환)를 가져 오려고합니다.
getSalesData.then(function (data) {
console.log(data.length + ' rows');
console.log(data[0]);
}).catch(err => console.error(err));
파라미터
data
가있는 곳
json_sheet
입니다
위 함수에 정의되어 있습니다.
그래서
data.length
(행 수) 800k + 대신 0을 얻습니다.
물론, 나는
data[0]
를 얻을 수 없습니다
어느
undefined
입니다
.
PS .: 파일에57.3mb가 있습니다-원인인지 확실하지 않습니다
도움을 주셔서 감사합니다.
- 답변 # 1
관련 자료
- node.js - nodejs fs를 사용하여 동시에 파일 읽기
- 빈 파일 (nodejs)을 만드는 fswriteFile
- javascript - Nodejs 일괄 처리는 루프를 사용하여 현재 디렉터리의 모든 폴더에 파일을 만듭니다
- artificial intelligence - 프롤로그에서 재귀를 사용하여 직각 삼각형을 그리는 방법은 무엇입니까?
- mysql - Python에서 firebase를 사용하여 폴더 (csv 파일 포함)를 dB에 업로드
- 연합 인증을 사용하여 Nodejs를 사용하여 Snowflake에 연결
- 상대 경로를 사용하여 C ++ 파일에서 위로 탐색하는 방법
- bash 스크립트를 사용하여 terraform 변수 파일 편집
- reactjs - 16kb보다 큰 파일은 업로드시 apollo 및 graphql을 사용하여 손상됩니다
- vue.js - Dropzone과 함께 Laravue를 사용하여 파일을 업로드하는 방법
- node.js - NodeJS, Google API를 사용하여 새로 고침 토큰으로 새 토큰을 얻는 방법은 무엇입니까?
- javascript - NodeJS를 사용하여 MariaDB에 데이터를 삽입 할 때 발생하는 문제
- command line - 새 이름에 폴더 이름의 일부를 사용하여 파일을 반복적으로 복사하고 이름을 바꿉니다
- python - 목록과 일치하는 디렉토리의 파일 사용
- Google 스프레드 시트에서 Google Places API 사용
- image processing - ImageMagick 변환 명령을 사용하여 1280x720 jpg 파일을 640x240 ppm 파일로 변환하는 방법은 무엇입니까?
- 최소한의 코드 줄을 사용하여 파이썬에서 파일 읽기
- amazon web services - Nodejs를 사용하여 AWS Lambda의/tmp 폴더에서 S3로 파일을 업로드하는 방법
- amazon web services - 람다에서 nodejs를 사용하여 AWS 비디오 트랜스 코더를 구현하는 방법
- node.js - nodejs cron 작업을 사용하여 일정 보고서 기능을 만드는 방법은 무엇입니까? (aws autoscaling 문제)
관련 질문
- javascript : 요청 후까지 React 구성 요소 내보내기를 기다리는 방법. (Shopify 앱 개발)
- javascript : passport.js는 무엇을하며 왜 필요한가요?
- javascript : 이 code가 모듈 오류를 찾을 수 없다는 이유는 무엇입니까?
- javascript : React.js : 원시 HTML 문자열이 Node.js에서 HTML 요소로 인식되지 않습니다.
- javascript : Visual Studio Code에서 'typegram /callback'모듈을 찾을 수 없습니다.
- javascript : ExpressJS &handlebars-액세스 세션 데이터?
- javascript : 누군가에게 역할이 있는지 알아보십시오.
- javascript : Node mssql 패키지로 대량 삽입
- javascript : png를 Tensor tensorflow.js로 변환
- javascript : MongoDB, 배열에서 객체 제거
기본적으로 NodeJS는 문자열에 대한 NodeJS VM 메모리 제한과 충돌하여 전체 파일을 읽을 수 없었습니다.
따라서해야 할 일은 다음과 같이 메모리 제한을 늘리는 것입니다.
NodeJS의 메모리는 512MB에서 2048MB/2GB로 증가합니다
그러나 이것은 많은 양의 값을 읽는 해결책 일뿐입니다.
이와 같은 대량의 데이터를 위협하기 위해 NodeJS를 사용하지 않는 것이 좋습니다. 대신 판다와 같은 라이브러리를 사용하여 파이썬과 함께 가십시오.
PS .: nodejs를 사용하여 데이터를 처리함으로써 나의 의견과 경험. 나는 nodejs가 그것을 위해 만들어진 것이라고 생각하지 않습니다.