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?
6
A
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()
Wszelkie myśli o tym, jak skuteczne jest to w porównaniu do parkiet - > csv -> S3 -> copy statement do redshift z S3 –
@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