我正在尝试使用 spark jdbc 从表中读取 5 亿条记录,然后对该表进行性能连接。当我从 sql developer 执行 sql 时,需要 25 分钟。但是,当我使用 spark JDBC 加载它时,上次它运行了 18 个小时,然后我取消了它。我为此使用 AWS-GLUE。
这就是我使用 spark jdbc 阅读的方式
df = glueContext.read.format("jdbc")
.option("url","jdbc:oracle:thin://abcd:1521/abcd.com")
.option("user","USER_PROD")
.option("password","ffg#Prod")
.option("numPartitions", 15)
.option("partitionColumn", "OUTSTANDING_ACTIONS")
.option("lowerBound", 0)
.option("upperBound", 1000)
.option("dbtable","FSP.CUSTOMER_CASE")
.option("driver","oracle.jdbc.OracleDriver").load()
customer_casedf=df.createOrReplaceTempView("customer_caseOnpremView")
我使用了 partitionColumn OUTSTANDING_ACTIONS,这是数据分布列 1 是 partitionColumn,第二列是它们的出现
1 8988894
0 4227894
5 2264259
9 2263534
8 2262628
2 2261704
3 2260580
4 2260335
7 2259747
6 2257970
这是我的加入,其中 customer_caseOnpremView 表加载需要超过 18 小时,其他两个表需要 1 分钟
ThirdQueryResuletOnprem=spark.sql("SELECT CP.CLIENT_ID,COUNT(1) NoofCases FROM customer_caseOnpremView CC JOIN groupViewOnpremView FG ON FG.ID = CC.OWNER_ID JOIN client_platformViewOnpremView CP ON CP.CLIENT_ID = SUBSTR(FG.PATH, 2, INSTR(FG.PATH, '/') + INSTR(SUBSTR(FG.PATH, 1 + INSTR(FG.PATH, '/')), '/') - 2) WHERE FG.STATUS = 'ACTIVE' AND FG.TYPE = 'CLIENT' GROUP BY CP.CLIENT_ID")
请建议如何使其快速。我没有从 10 到 40 的工人 我使用 Executor 类型标准到 GP2 最大的标准,但对工作没有影响