2017-01-31 2 views
3

데이터베이스에 데이터가 있습니다. sparklyr을 사용하여 Spark에서 데이터로 작업하고 싶습니다.sparklyr을 사용하여 데이터베이스에서 Spark로 데이터 전송

내가

dbconn <- dbConnect(<some connection args>) 
data_in_r <- dbReadTable(dbconn, "a table") 

다음 두 번

sconn <- spark_connect(<some connection args>) 
data_ptr <- copy_to(sconn, data_in_r) 

복사를 사용하여 스파크하기 위해 R에서 데이터를 복사 R로 데이터베이스에서 데이터를 가져올 DBI에게 기반 패키지를 사용할 수있는 것은 느린 큰 데이터 세트의 경우.

데이터베이스에서 스파크로 직접 데이터를 복사하려면 어떻게해야합니까?

스파크리어에는 가져 오기 기능이 여러 개 있지만 데이터베이스는 없습니다. sdf_import()은 가능성과 비슷하지만이 컨텍스트에서 사용하는 방법이 명확하지 않습니다.

답변

4

Sparklyr는> = 0.6.0

당신은 spark_read_jdbc를 사용할 수 있습니다.

Sparklyr < 0.6.0

내가 거기에 거기에 더 우아한 해결책이 있지만, 여기에 낮은 수준의 API를 사용하여 최소한의 예입니다 희망 :

  • 그 불꽃에 액세스 할 수 있는지 확인 필요한 JDBC 드라이버 (예 : 좌표를 spark.jars.packages에 추가하여)

    spark.jars.packages org.postgresql:postgresql:9.4.1212 
    

  • SPARK_HOME/conf/spark-defaults.conf에 데이터로드 및 임시 뷰를 등록 : PostgreSQL의 (현재 버전에 대한 조정)와 예를 들어, 당신은 추가 할 수

    name <- "foo" 
    
    spark_session(sc) %>% 
        invoke("read") %>% 
        # JDBC URL and table name 
        invoke("option", "url", "jdbc:postgresql://host/database") %>% 
        invoke("option", "dbtable", "table") %>% 
        # Add optional credentials 
        invoke("option", "user", "scott") %>% 
        invoke("option", "password", "tiger") %>% 
        # Driver class, here for PostgreSQL 
        invoke("option", "driver", "org.postgresql.Driver") %>% 
        # Read and register as a temporary view 
        invoke("format", "jdbc") %>% 
        invoke("load") %>% 
        # Spark 2.x, registerTempTable in 1.x 
        invoke("createOrReplaceTempView", name) 
    

    는 여러 options 한 번에 전달할 수 있습니다 environment :

    로드 일시적인보기 :

    dplyr::tbl(sc, name) 
    
  • partitionColumn, *BoundnumPartitions에 초점을 맞춘, 더 JDBC 옵션에 대해 읽으십시오. 자세한 내용은

  • 예를 How to use JDBC source to write and read data in (Py)Spark?How to improve performance for slow Spark jobs using DataFrame and JDBC connection?

에 대한 참조
관련 문제