2016-04-14 20 views
6

Abbiamo enormi quantità di dati del server memorizzati in S3 (presto in un formato Parquet). I dati richiedono una certa trasformazione e quindi non può essere una copia diretta da S3. Userò Spark per accedere ai dati, ma mi chiedo se invece di manipolarlo con Spark, scrivere di nuovo su S3, e quindi copiare su Redshift se posso saltare un passo ed eseguire una query per tirare/trasformare i dati e poi copiarli direttamente su Redshift?È possibile copiare direttamente da Parquet/S3 a Redshift usando Spark SQL/Hive/Presto?

risposta

11

Certo, assolutamente possibile.

codice Scala da leggere in legno (tratto da here)

val people: RDD[Person] = ... 
people.write.parquet("people.parquet") 
val parquetFile = sqlContext.read.parquet("people.parquet") //data frame 

codice Scala di scrivere a redshift (tratto da here)

parquetFile.write 
.format("com.databricks.spark.redshift") 
.option("url", "jdbc:redshift://redshifthost:5439/database?user=username&password=pass") 
.option("dbtable", "my_table_copy") 
.option("tempdir", "s3n://path/for/temp/data") 
.mode("error") 
.save() 
+0

Ogni pensiero su come efficace questo è in confronto al parquet - > csv -> S3 -> copia istruzione in redshift da S3 –

+0

@marcin_koss, non l'ho misurato, ma in generale, meno trasformazioni, meglio è. Con S3 devi anche tenere a mente i possibili costi di scrittura/lettura dei dati da esso. – evgenii

Problemi correlati