2016-04-14 16 views
6

Mamy ogromne ilości danych serwera przechowywanych w S3 (wkrótce będzie to format Parquet). Dane wymagają transformacji, więc nie może to być prosta kopia z S3. Będę używał Spark, aby uzyskać dostęp do danych, ale zastanawiam się, czy zamiast manipulować nim przy pomocy Sparka, napisać z powrotem do S3, a następnie skopiować do Redshift, czy mogę po prostu pominąć krok i uruchomić zapytanie do pobrania/transformacji dane, a następnie skopiować je bezpośrednio do Redshift?Czy można kopiować bezpośrednio z Parkietu/S3 na Redshift przy użyciu Spark SQL/Hive/Presto?

Odpowiedz

11

Pewnie, całkowicie możliwe.

kod Scala czytać parkiet (zaczerpnięte z here)

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

kod Scala pisać do przesunięcia ku czerwieni (wzięte z 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

Wszelkie myśli o tym, jak skuteczne jest to w porównaniu do parkiet - > csv -> S3 -> copy statement do redshift z S3 –

+0

@marcin_koss, Nie zmierzyłem tego, ale ogólnie rzecz biorąc, im mniej transformacji, tym lepiej. W przypadku S3 należy pamiętać o kosztach zapisu/odczytu danych. – evgenii