2017-12-29 65 views
1

나는 python에 익숙하지 않다. 나는 redshift에서 내 데이터를 가지고 있으며 파이썬에서 더 빨리 데이터를 처리하려고한다. 저는 다양한 알고리즘을 실행하고 이러한 데이터에 대한 다양한 계산을 수행하기 때문에 파이썬을 사용하고 있습니다. 이는 레드 쉬프트에서는 불가능합니다. 자습서를 보았지만 파이썬으로로드 할 때마다 너무 많은 시간이 걸립니다. 이 완벽하게 잘 작동하지만, 내가 나를 빠르게 데이터를 처리하는 데 도움이 수있는 몇 가지 방법을 원하는redshift에서 파이썬으로 더 빨리 데이터를 처리하는 방법은 무엇입니까?

import psycopg2 

con=psycopg2.connect(dbname = "xxxx", host="redshifttest-icp.cooqucvshoum.us-west-2.redshift.amazonaws.com", port= "5439", user="xxxx", password= "xxxx") 
cur = con.cursor() 

a = "select * from xxxx ;" 

import pandas as pd 
df = pd.read_sql(a,con) 
df = df.fillna(0) 
df2=df2.fillna(0) 

.. 이 사람이 나를 도와주세요 수 있습니다 : 여기 내 코드?

+0

여기서 무엇을 할 계획입니까? 데이터 원본의 데이터가 너무 큰 경우 청크를 사용하여 전체 데이터를 전송하는 것보다 빠르게로드 할 수 있습니다. – user8505495

+0

나는 데이터를로드하는 다양한 방법을 알고 싶지만 redshift에서 내 데이터는 redshift 아마존입니다 –

+0

Redshift는 단일 서버에서 파이썬보다 훨씬 빠릅니다. 논리를 SQL로 변환하고 Redshift에서 실행하는 것이 좋습니다. –

답변

2

Redshift (약 10,000 개 이상)에서 많은 수의 행을 검색하는 경우 가장 빠른 방법은 UNLOAD command을 사용하여 CSV로 직접 S3에 추출하는 것입니다. 그런 다음 추출물을 검색하여 파이썬에서 추출한 것을 조작 할 수 있습니다.

많은 수 (수백만)를 처리하는 경우 Python의 속도에 의해 제한 될 것으로 생각됩니다. 이 경우 Spark/PySpark와 spark-redshift package을 사용하는 것이 좋습니다. Spark은 무대 뒤에서 UNLOAD를 수행 할 것이고 데이터 프레임 계산은 서버 클러스터에서 Spark에 의해 병렬화 될 수 있습니다.

# Read data from a query 
df = spark.read \ 
    .format("com.databricks.spark.redshift") \ 
    .option("url", "jdbc:redshift://redshifthost:5439/database?user=username&password=pass") \ 
    .option("query", "select x, count(*) my_table group by x") \ 
    .option("tempdir", "s3n://path/for/temp/data") \ 
    .load() 
+0

위의 코드와 동일하지만 오류가 발생했습니다. "Spark jars 디렉토리를 찾을 수 없습니다. 이 프로그램을 실행하기 전에 Spark를 빌드해야합니다." @ 조 해리스 –