scala - Cassandra 中的并行性使用 Scala 读取
问题描述
我正在尝试使用 spark 从 Cassandra 表中调用并行读取。但是我无法调用并行性,因为在任何给定时间都只会发生一次读取。应该遵循什么方法来实现相同的目标?
解决方案
我建议您使用以下方法来源 Russell Spitzer 的博客
使用部分扫描联合手动划分我们的分区: 将任务推送给最终用户也是一种可能性(以及当前的解决方法。)大多数最终用户已经理解为什么他们有长分区并且通常知道他们的列值所在的域in. 这使得他们可以手动划分请求,以便分割大分区。
例如,假设用户知道聚类列 c 的范围从 1 到 1000000。他们可以编写如下代码
val minRange = 0
val maxRange = 1000000
val numSplits = 10
val subSize = (maxRange - minRange) / numSplits
sc.union(
(minRange to maxRange by subSize)
.map(start =>
sc.cassandraTable("ks", "tab")
.where("c > $start and c < ${start + subSize}"))
)
每个 RDD 将包含一组独特的任务,仅绘制完整分区的一部分。union 操作将所有这些不同的任务连接到一个 RDD 中。任何单个 Spark 分区将从单个 Cassandra 分区中提取的最大行数将限制为 maxRange/numSplits。这种方法虽然需要用户干预,但会保留局部性,并且仍会最大限度地减少磁盘扇区之间的跳转。
推荐阅读
- tableview - 无法访问表视图单元格中 Struct 中的值。阅读下面截图中描述的代码
- excel - 修复 Access VBA 中的“变量未定义”,以使用“Application.Calculation=xlCalculationManual”关闭自动计算
- google-apps-script - 有没有脚本来做查询和导入范围结合的功能
- c# - 两个线程访问全局变量时的意外结果
- python - BeautifulSoap 为具有特定类的 div 中的所有 img 获取多个元素
- android - Android后退按钮退出应用程序react-native
- javascript - 将工具提示添加到 Dynamics 365 中子网格中的列名称
- java - Spring Boot 如何选择外部化的弹簧属性文件
- curl - 使用 CURL 重定向后发送表单数据
- python - Python:将函数作为参数传递以初始化对象的方法。Pythonic 与否?