2017-09-15 1 views
0

저는 PySpark를 사용하여 큰 데이터 분석을 수행하고 있습니다. 내가 가진 (* 와일드 카드 같은 행위 곳)여러 개의 S3 폴더/경로를 PySpark에 읽어들입니다.

이슈가

df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true').load('file:///home/path/datafolder/data2014/*.csv') 

다음 : 나는 다음과 같은 명령을 사용하여 특정 버킷의 특정 폴더에 저장된 모든 CSV 파일을 가져올 수 있어요 :

  1. 내가 2014 년 및 2015 년 데이터, 즉 파일 1 내 분석을 수행하려는 경우 것은 파일 2 .load('file:///home/path/SFweather/data2015/*.csv')이며, .load('file:///home/path/SFweather/data2014/*.csv')하고 파일 3 .load('file:///home/path/NYCweather/data2014/*.csv')하고 4 .load('file:///home/path/NYCweather/data2015/*.csv')입니다 파일. 하나의 데이터 프레임을 얻기 위해 동시에 여러 경로를 가져 오는 방법은 무엇입니까? 그것들을 모두 개별적으로 데이터 프레임으로 저장 한 다음 PySpark에서 함께 결합해야합니까? (모든 CSV가 동일한 스키마를 가지고 있다고 가정 할 수 있습니다.)
  2. 지금은 2014 년 11 월이라고 가정합니다. 분석을 다시 실행하고 싶다면 "최근 데이터"를 실행하십시오. 2014 년 12 월 12 월 14 일? 예를 들어, 12 월 14 일에 파일 2 : .load('file:///home/path/datafolder/data2014/dec14/*.csv')에로드하고 원래 분석을 위해 .load('file:///home/path/datafolder/data2014/nov14/*.csv') 파일을 사용하고 싶습니다. Jupyter 노트북 (또는 유사)이로드 경로를 업데이트하고 최신 실행 가져 오기 (이 경우 'nov14'는 'dec14'로 바뀌고 'jan15'등으로 바뀝니다)를 예약하는 방법이 있습니까?

이전 질문을 살펴 보았지만 AWS/PySpark 통합과 관련하여 답변을 찾지 못했습니다.

도움을 위해 미리 감사드립니다!

[배경 : 다양한 빅 데이터 세트가 포함 된 다양한 팀의 많은 S3 버킷에 액세스 할 수있게되었습니다. 그것을 S3 버킷에 복사하면 Jupyter 노트북을 만드는 것이 마치 버켓에서 직접 데이터를 가져 와서 모델/테이블/etc ontop을 구축하고 처리 된 결과를 데이터베이스에 저장하는 것보다 훨씬 많은 작업처럼 보입니다. 그러므로 위의 질문을 게시하고 있습니다. 내 생각이 완전히 잘못 되었다면 제발 그만 해요! :)]

답변

0

파일이 모두 동일한 형식 인 경우 와일드 카드로 여러 경로를 읽을 수 있습니다. 당신의 예에서

는 :

.load('file:///home/path/*/*/*.csv') 

당신이 원하는 경우

.load('file:///home/path/SFweather/data2014/*.csv') 
.load('file:///home/path/SFweather/data2015/*.csv') 
.load('file:///home/path/NYCweather/data2014/*.csv') 
.load('file:///home/path/NYCweather/data2015/*.csv') 

당신은 하나의 dataframe에 한 번에 모든 CSV 년대를 읽을 다음 경로에 위의 4 부하 문을 대체 할 수 특정 파일/폴더를 읽지 않으려면 다음을 수행하십시오.

.load('file:///home/path/[SF|NYC]weather/data201[4|5]/*.csv') 
+0

감사합니다. 빠른 답변. 1. 나는 위의 첫 번째 예제에 따라 다른 .load를 단순히 추가합니다. 경로/*/*/*. csv와 같은 것을 피하는 이유는 데이터가 거대하기 때문입니다 ('데이터 실행'에 관한 두 번째 질문을보고 최신 실행 만 캡처 함). 2. [SF | NYC | LON] 날씨 나 [SF | NYC | LON]과 같이 원하는 폴더 이름이 있으면 조건부를 무제한으로 사용할 수 있습니까? 나는 '파일/폴더에서 읽는 것을 피하기 위해'주석에 의해 조금 벗어났습니다. 그러나이 예는 그것을 포함하는 것 같습니다. 아마도 나는 이것을 미리 사과하여 오해하고 있습니다. – lseactuary

+0

1. 내가 작성한로드 명령문 각각은 4 개의로드 명령문을 대체합니다. 2. 예, 원하는 수만큼 조건을 추가 할 수 있습니다 [1 | 2 | 3 | 4 | ...] 및 스파크는 일치하는 파일을 읽습니다. –

+0

굉장! 나에게 여분의 일과 비용을 많이 절약했다고 ​​생각해. :) 그것을 시험해보고 문제가 생기면 알려주겠습니다. 다시 한 번 감사드립니다! – lseactuary

관련 문제