【发布时间】:2018-07-17 15:08:23
【问题描述】:
我正在尝试从 S3(镶木地板文件)插入 Redshift 数据。通过 SQLWorkbench 完成 600 万行需要 46 秒。但是通过连接器 spark-redshift 完成它大约需要 7 分钟。
我正在尝试使用更多节点并获得相同的结果。
对使用 spark-redshift 改进时间有什么建议吗?
Spark 中的代码:
val df = spark.read.option("basePath", "s3a://parquet/items").parquet("s3a://parquet/items/Year=2017/Month=7/Day=15")
df.write
.format("com.databricks.spark.redshift")
.option("url", "jdbc:....")
.option("dbtable", "items")
.option("tempdir", "s3a://parquet/temp")
.option("aws_iam_role", "...")
.option("sortkeyspec", "SORTKEY(id)")
.mode(SaveMode.Append)
.save()
SQLWorkbench(Redshift SQL)中的代码:
CREATE EXTERNAL TABLE items_schema.parquet_items("id type, column2 type....")
ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS PARQUET
LOCATION 's3://parquet/items/Year=2017/Month=7/Day=15';
CREATE TABLE items ("id type, column2 type....");
INSERT INTO items (SELECT * FROM items_schema.parquet_items);
【问题讨论】:
-
在 aws 控制台上检查 - redshift 以查看 redshift 复制命令通过每种方法所花费的时间 - 还要检查生成的复制命令的数量。
-
您是否使用 Spectrum 将镶木地板作为 Redshift 中的外部表读取?请提供一个示例,说明您在 SQLWorkbench 中运行的内容以及使用
spark-redshift时正在运行的内容。 -
@JoeHarris 我编辑了问题并添加了代码以提供更多信息。
-
什么是spark集群和redshift集群配置
-
我发现自己也在做类似的事情。但是,我被建议写出镶木地板并使用复制命令来读取大文件。原因是 redshift 复制命令经过优化,可以按列扫描数据,压缩有助于提高效率。不知道 spark-redshift 怎么写的细节
标签: apache-spark amazon-redshift amazon-redshift-spectrum