【发布时间】:2021-05-13 22:24:52
【问题描述】:
我有一个 16 节点的 cassandra 集群和一个根据 cfstats 的表,总共约为 (8.9 x 16 = )143Gb。我有一个复制因子 3(我不确定它是否相关),唯一分区键的数量是 4.827。我正在尝试计算比率,以便在每次我想加入超过 3.170 个分区键时将其关闭。
directJoinSizeRatio参数的公式为:
(table size * directJoinSizeRatio) > size of keys
但是,表大小到底指的是什么。它是 cfstats 在每个节点中所说的表的压缩大小的总和吗?是不是只有一个节点的表大小?
所以,就我而言,我有 4827 个 uuid 作为字符串。会不会:
143.000.000.000 bytes * parameter > 3170 *36 bytes?
或
8.900.000.000 bytes * parameter > 3170 *36 bytes?
这是否意味着我真的必须将参数分别降低到 0,000000798 或 0,000012822?
编辑 1
这是桌子:
CREATE TABLE experiment(
experimentid varchar,
description text,
rt float,
intensity float,
mz float,
identifier text,
chemical_formula text,
filename text,
PRIMARY KEY ((experimentid),description, rt, intensity, mz, identifier, chemical_formula, filename)
);
P.S.:该表有大约 22 亿条记录
编辑 2
我总是加入分区键,这就是为什么我猜它很快,即:
Dataset<Row> metlistinitial2 = sp.read().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "mdb");
put("table", "experiment");
}
})
.load().select(col("experimentid"), col("description"), col("intensity")).join(dfexplist,"experimentid").repartition(col("experimentid"));
然后可以有一些 groupby 或更多联接。
【问题讨论】:
标签: join cassandra key partition spark-cassandra-connector