Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark和cassandra,聚类键的范围查询_Apache Spark_Cassandra_Spark Cassandra Connector - Fatal编程技术网

Apache spark Spark和cassandra,聚类键的范围查询

Apache spark Spark和cassandra,聚类键的范围查询,apache-spark,cassandra,spark-cassandra-connector,Apache Spark,Cassandra,Spark Cassandra Connector,我有以下结构的卡桑德拉表: 创建表格( 密钥int, 时间戳, 测量浮动, 主键(键、时间) ); 我需要创建一个Spark作业,它将从上一个表中读取数据,在指定的开始和结束时间戳内执行一些处理,并将结果刷新回cassandra 所以我的spark cassandra连接器必须对集群cassandra表列进行范围查询 如果我执行以下操作,是否存在性能差异: sc.cassandraTable(keyspace,table). as(caseClassObject). filter(a =>

我有以下结构的卡桑德拉表:

创建表格( 密钥int, 时间戳, 测量浮动, 主键(键、时间) );

我需要创建一个Spark作业,它将从上一个表中读取数据,在指定的开始和结束时间戳内执行一些处理,并将结果刷新回cassandra

所以我的spark cassandra连接器必须对集群cassandra表列进行范围查询

如果我执行以下操作,是否存在性能差异:

sc.cassandraTable(keyspace,table).
as(caseClassObject).
filter(a => a.time.before(startTime) && a.time.after(endTime).....
所以我要做的是将所有数据加载到Spark中并应用过滤

或者如果我这样做:

sc.cassandraTable(keyspace, table).
where(s"time>$startTime and time<$endTime)......
sc.cassandraTable(键空间,表)。

其中(s“time>$startTime和time我认为1/20会被夸大。主要是因为时间是集群的关键,所以cassandra无论如何都会进行全表扫描。但它确实会节省,从cassandra移动数据到spark之间花费的时间,这可能是大量的数据。我肯定会希望节省的时间与读取的数据量成比例。1)需要读取的SSTABLE的数量将大大减少,因为不进行范围扫描时,范围扫描不需要读取所有SSTABLE。2)必须通过C*Jvm的对象数量将大大减少,同样,要分配和反序列化的对象数量也将大大减少。因此,垃圾收集也会减少所需的和更少的对象分配。3.)C*进程和Spark Executor进程之间的通信量已最小化。这不是零拷贝系统。感谢您的回答。我预期会出现这种行为,但希望确定。我唯一担心的是cassandra将不得不进行全表扫描(因为我没有在分区键上指定任何条件),但无论如何,第二个解决方案要好得多。在这两种情况下,它都会进行完整的表扫描,但第二个表扫描的工作量很大:)我认为1/20会有些夸张。主要是因为时间是聚类的关键,所以cassandra无论如何都会进行全表扫描。但它确实会节省,从cassandra到spark之间移动数据所花费的时间,这可能是大量数据。我肯定会期望节省的时间与读取的数据量成比例。1)sstables的数量需要由于在不进行范围扫描的情况下,范围扫描不需要读取所有SSTABLE,因此要读取的d将少得多。2)必须通过C*Jvm的对象数量将少得多,同样,要分配和反序列化的对象数量也将大大减少。因此,所需的垃圾收集更少,对象分配也更少C*进程和Spark Executor进程之间的通信量被最小化。这不是一个零拷贝系统。谢谢你的回答。我期待这种行为,但想确定一下。我唯一担心的是cassandra将不得不进行全表扫描(因为我没有在分区键上指定任何条件),但无论如何,第二种解决方案要好得多。在这两种情况下,它都会进行完整的表格扫描,但第二种表格扫描需要大量时间:)
sc.cassandraTable(keyspace, table).where(s"time>$startTime and time<$endTime)
sc.cassandraTable[CaseClassObject](keyspace, table)