mysql - 在不知道上限的情况下使用spark并行读取sql数据库

标签 mysql apache-spark apache-spark-sql spark-dataframe

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/

相关文章:

mysql - 如何一屏显示mysql查询结果

apache-spark - 在 spark-submit 中为 spark 应用程序提供带有空格的参数/arg 的正确方法

apache-spark - 有没有办法在Java Spark 2.1中进行广播联接

hadoop - 在 Yarn 集群上运行 Spark 作业

apache-spark - 如何知道我的数据有偏差?

java - 将 Spark SQL 与 Spark Streaming 结合使用

php - 如何使用带有 JSON 字符串的 WordPress update_post_meta?

java - 无法使用 Java 更新 mySQL 数据库中的行,没有错误消息

apache-spark - Spark-HBASE 错误 java.lang.IllegalStateException : unread block data

mysql - 创建从 from-to-entries 的时间序列