2016-04-14 72 views
6

我們有大量的服務器數據存儲在S3(即將以Parquet格式)。數據需要一些轉換,所以它不能是S3的直接拷貝。我將使用Spark來訪問數據,但我想知道是不是用Spark來操作它,寫回到S3,然後複製到Redshift,如果我可以跳過一個步驟並運行查詢來拉/變換數據,然後直接複製到Redshift?您可以使用Spark SQL/Hive/Presto從Parquet/S3直接複製到Redshift嗎?

回答

11

當然,完全有可能。

Scala代碼讀取鑲木地板(從here拍攝)

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

Scala代碼寫入到紅移(從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

如何高效,這是相較於實木複合地板有什麼想法 - > csv - > S3 - >複製陳述S3 –

+0

@marcin_koss,我還沒有測量過,但一般來說,轉換越少越好。有了S3,你還必須記住寫入/讀取數據的可能成本。 – evgenii

相關問題