当前位置: 首页 > 知识库问答 >
问题:

Spark-Cassandra在用于复合分区键时非常慢

邢皓
2023-03-14

我有一个带有复合分区键的 cassandra 表(time_bucket 时间戳,节点 int)。time_bucket值是插入数据的时间,秒转换为 00,节点值范围为 0 到 100

spark作业每分钟运行一次,从表中提取数据。该表包含近2500万条记录,每分钟都有记录被添加。

如果我的 Spark 作业每次运行时都选择所有记录,则作业将在 2 分钟内完成。但是如果我使用:

s < code > c . cassandratable(key space _ name,table_name)。where("time_bucket =?",来自)。where("nodeid_bucket IN?"nodeid_bucket_range)

其中 val nodeid_bucket_range = 0 到 100,

这项工作需要10分钟才能完成。

我的集群有6个节点,使用DSE 4.8.9。每个执行器使用8个内核和20GB内存。增加这些值无助于加快点火工作。

知道为什么我的工作需要10分钟吗?当使用IN子句时,spark-cassandra功能不好吗?

共有2个答案

向苗宣
2023-03-14

IN 语句转换为键或键或键3 ...OR key100,这对于优化器做出有用的东西来说是非常低效的。在您的情况下,您可以使用:

sc.cassandra表(keyspace_name,table_name)。time_bucket = ? ", )。

观察范围的边缘,当然这是假设你的范围是连续的。

杭昊空
2023-03-14

您可能需要join

https://github.com/datastax/spark-cassandra-connector/blob/master/doc/2_loading.md#using-joinwithcassandratable

 类似资料:
  • 使用Spark连接器通过分区键查询cassandra的理想方法是什么。我使用传入键,但这导致cassandra在引擎盖下添加,从而导致超时。 当前设置: 这里是分区(不是主)键,我有一个复合主键,只使用分区键进行查询 更新:是的,我得到了一个异常:

  • 插入entp(col1、col2、col3)值(“ABC”、“XYZ”、null) 谢了!

  • 我们有一个叫做cassandra扫描的程序,它使用spark-cassandra连接器在一个非常大的表中列出分区键的所有值。该表有大约1700万个Cassandra分区,每个分区平均有200行。包含该表的Cassandra集群在6个节点上运行DSE 5.1.8。包含该表的键空间的复制因子为3。 以下是密钥空间和表的简化定义。 cassandra-scan中用于列出分区键的所有值的语句如下: 我们使

  • 这里,aggregatebykey对我前面分配的键(1到N)进行聚合。我可以合并分区,因为我知道我需要的分区数量,并将coalesce shuffle设置为true,以平衡分区。 有人能指出这些转换可能导致RDD最后几个分区处理缓慢的一些原因吗?我想知道这是否与数据偏斜有关。

  • 我有一个包含大约 5 亿条记录的 cassandra 表(在 6 个节点中),现在我正在尝试在 Amazon EMR 中使用 spark-cassandra-connector 插入数据 表结构 以下是我的火花提交选项 但是在日志中,我看到写入 Cassandra 大约需要 4-5 分钟才能加载 200,000 条记录(而总执行时间为 6 分钟) 我还在Spark conf中添加了以下内容 但仍然