我正在尝试读取postgres db上的表,并将数据加载到HDFS上的配置单元表中,如下所示:
val yearDF = spark.read.format("jdbc").option("url", connectionUrl).option("dbtable", s"(${execQuery}) as year2017")
.option("user", devUserName).option("password", devPassword)
.option("partitionColumn","source_system_name")
.option("lowerBound", 10000).option("upperBound", 50000)
.option("numPartitions",12).load()
我的作业失败,并显示以下消息:Container exited with an non-zero exit code 143&GC开销问题。
数据量很大,会导致分区的倾斜。
在观察了表中的数据之后,我了解到“source\u system\u name”不是对数据进行分区的正确列。但我发现其他三列的组合:
source_system_name, org_code, period
最适合在读取和处理时分割数据(我做了一个'groupby'来找出表中的行数,数据在每个组中分布得有点均匀)
但我不知道如何使用spark jdbc中的所有三列
partitionColumn
选项。有人能告诉我在从RDBMS表读取数据时是否可以在option:partitionColumn中使用多列吗。