Spark 允许您从 sql 数据库源并行读取,并且可以基于滑动窗口进行分区,例如(来自 book,第 7 章)
val colName = "count"
val lowerBound = 0L
val upperBound = 348113L // this is the max count in our table
val numPartitions = 10
spark.read.jdbc(url,
tablename,
colName,
lowerBound,
upperBound,
numPartitions,
props).count()
这里,上限是预先知道的。
比方说,一个表在一天内获得“x”行(可能在 1-2 百万之间),在一天结束时我们提交一个 spark 作业,进行一些转换并写入 Parquet/CSV/JSON。如果我们事先不知道将向 SQL 源数据库写入多少行(从 1 到 2 百万不等),那么在这种情况下,进行分区的最佳方法或做法是什么。
一种方法是估计您的上限,但我不确定这是正确的方法。
最佳答案
我遇到了完全相同的问题。我还需要一个随机分布。所以我选择一个 int 列并在其上获取 mod 10。这样我就可以不关心地划分任何东西 边界或分布。
options += ("numPartitions" -> numPartitions,"partitionColumn"->"mod(my_int_column,10)","lowerBound"->"0","upperBound"->"9")
关于mysql - 在不知道上限的情况下使用spark并行读取sql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45025187/