Производительность между выгрузкой и чтением sqlContext - PullRequest
0 голосов
/ 25 июня 2019

Помогите мне получить оптимизированную производительность при чтении данных из красного смещения.

Вариант 1. Я выгружаю данные из таблицы в папку S3, а затем считываю их как фрейм данных

Optin2: я использую sqlContext read.

Объем моих данных в настоящее время меньше, но ожидается рост в ближайшие месяцы, поэтому, когда я попробовал оба варианта, это заняло почти одинаковое время.

Опция: 1

unload ('select * from sales_hist')   
to 's3://mybucket/tickit/unload/sales_' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

hist_output_table_df = spark.read.format(config['reader_format'])\
      .option('header', config['reader_header'])\
      .option('delimiter', config['reader_delimiter'])\
      .csv(s3_directory +  config['reader_path'])


читатель_путь совпадает с каталогом, как выгружено выше.

Опция: 2

 hist_output_table_df = sqlContext.read.\
                          format("com.databricks.spark.redshift")\
                          .option("url",jdbcConnection)\
                          .option("tempdir", tempS3Dir)\
                          .option("dbtable", table_name)\
                          .option("aws_iam_role",aws_role).load()

Есть ли стоимостьЗначение между двумя подходами

1 Ответ

2 голосов
/ 25 июня 2019

Драйвер Spark Redshift, используемый sqlContext, делает UNLOAD за кадром. Вот почему вы должны предоставить tempS3Dir - вот куда он выгружается.

Таким образом, производительность будет примерно такой же, но я бы предложил использовать sqlContext, потому что она более инкапсулирована.

...