Scala Apache Spark是否适用于一般的非分析OLTP任务。

Scala Apache Spark是否适用于一般的非分析OLTP任务。,scala,apache-spark,cassandra,Scala,Apache Spark,Cassandra,我正在考虑加入ApacheSpark,以便使用scala和Akka的cassandra数据库,我一直在试图找到问题的答案,即我是否可以放弃我现有的cassandra驱动程序,只使用Spark。它是否有办法通过分区键等来查找记录,或者它只能获取整个表并对其进行过滤。我知道你可以过滤到一条记录,但这意味着要遍历一个潜在的海量表。我希望spart本质上发出CQL where子句,并允许我在选择一行或一组行时只获取一行。如果这是不可能的,那么我需要坚持使用我现有的驱动程序进行正常的db操作,并使用spa

我正在考虑加入ApacheSpark,以便使用scala和Akka的cassandra数据库,我一直在试图找到问题的答案,即我是否可以放弃我现有的cassandra驱动程序,只使用Spark。它是否有办法通过分区键等来查找记录,或者它只能获取整个表并对其进行过滤。我知道你可以过滤到一条记录,但这意味着要遍历一个潜在的海量表。我希望spart本质上发出CQL where子句,并允许我在选择一行或一组行时只获取一行。如果这是不可能的,那么我需要坚持使用我现有的驱动程序进行正常的db操作,并使用spark进行分析

可以使用CassandraRDD.where()在Spark中发出CQL where子句。

要过滤行,可以使用Spark提供的过滤器转换。但是,这种方法会导致从Cassandra提取所有行,然后由Spark进行过滤。此外,对结果中不包含的对象进行序列化和反序列化会浪费一些CPU周期。为了避免这种开销,CassandraRDD提供了where方法,该方法允许您传递任意CQL条件以过滤服务上设置的行

下面是一个关于如何使用CassandraRDD.where()的简单示例

如果你有桌子

CREATE TABLE test.data (
   id int PRIMARY KEY,
   data text
);
您可以使用spark来选择和过滤主键

sc.cassandraTable("test", "data ").select("id", "data").where("id = ?", 1).toArray.foreach(println)
更多关于:

但是在Cassandra驱动程序中,您可以更灵活地控制查询,而且Spark将比Cassandra驱动程序花费更多的cpu、时间和内存

正如罗斯所说


虽然这是正确的,where子句允许您运行单个分区请求,但这比直接通过Java驱动程序运行类似的查询要贵几个数量级


这可能是正确的答案,谢谢。不知道是否有任何警告。如果这样的话,我想使用Spark作为我的主要cassandra连接器管理器。虽然这是正确的,并且where子句允许您运行单个分区请求,但这比直接通过Java驱动程序运行类似查询要贵几个数量级。谢谢,我已经接受了这个答案。我将使用OLTP的基本驱动器和RDD的spark。