我正在尝试使用spark读取postgres db上的表。为此,我编写了以下内容:
val yearDF = spark.read.format("jdbc").option("url", connectionUrl)
.option("dbtable", s"(${execQuery}) as year2016")
.option("user", devUserName)
.option("password", devPassword)
.option("partitionColumn","epochVals")
.option("lowerBound", minEp)
.option("upperBound", maxEp)
.option("numPartitions",15)
.load()
为了有效地读取日期和写入输出文件,我试图发现可以找到一些在线资料来确定正在读取的大小数据以及我的工作应使用多少分区,执行器和输出文件来处理数据。 我发现了这个link,其中包含与之相关的信息。
该链接提供了一个公式:
number Of Megabytes = M = (N*V*W) / 1024^2
where
N = number of records
V = number of variables
W = average width in bytes of a variable
但是我不理解术语V & W
。 “ V”代表什么?列数?
这些是“ W”提到的要点:
Type of variables Width
Integers, −127 <= x <= 100 1
Integers, 32,767 <= x <= 32,740 2
Integers, -2,147,483,647 <= x <= 2,147,483,620 4
Floats single precision 4
Floats double precision 8
Strings maximum length
源表中的列采用以下格式:
je_header_id:bigint
attribute10:character varying(150)
doc_sequence_value:numeric
reference_date:date
source_transaction:numeric(30,6)
doc_sequence_id:numeric(15,0)
xx_last_update_tms:timestamp without time zone
xx_last_update_log_id:integer
xx_data_hash_id:bigint
xx_pk_id:bigint
mje_flag:character varying(1)
在整数格式中,我有integer, bigint, numeric(15,0)
。我不知道应该将宽度1,2,4
映射到哪些列。
是否将numeric(15,0)视为LONG?
在搜寻许多网站后,我发现了上述公式。谁能让我知道这是确定所读取数据大小的正确方法,还是我可以尝试其他方法?