2016-03-21 34 views
0

Cassandra将其分区作为多行显示,但内部存储为宽行,这就是我想用Spark处理数据的方式。如何让Cassandra分区在Spark中感觉像一个宽行?

更具体一点,我会以某种方式获得Cassandra分区的RDD或这些分区的数据框。

然后,我愿做一个map操作,并且在关闭,我想表达的是这样的:

row['parameter1']['value']/len(row['parameter2']['vector_value']) 

伪代码只是为了让一个想法,一个简单的除法,并采取lenght的矢量。

我的表是

create table(
    dataset_name text, 
    parameter  text, 
    value   real, 
    vector_value list<real>, 
    primary key(dataset_name, parameter)); 

我怎么能这样做efficiencly?与PySpark一起使用。

我想我需要类似Pandas set_index

回答

1

从逻辑上讲,RDD groupBy在我看来是你想要做的。 RDD groupBy被认为对于大型分组是不利的,但是在这里我们将分组在cassandra分区上,所以它应该被保存在一个spark分区中,并且它应该是本地的,因为一个分区的所有行都会被打开同一个节点。

我比Spark更多地使用Scala和Spark,所以让我们试试吧。但我没有测试它。 我建议

rdd = sc.cassandraTable('keyspace','table')。map(lambda x:((x.dataset_name,(x.parameter,value,vector_value)))//创建密钥对

RDD2组=排序(rdd.groupByKey())// GroupByKey返回(键,迭代器),因此,分选得到的列表

查找GROUPBY/groupByKey功能

http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.RDD

你会得到每个partiti一行在每个分区上以及内部都有一个集群行列表。所以你应该能够访问[0]的第一次发生,所以'参数1',然后[1]'参数2'

编辑:一位同事告诉我spark-cassandra连接器提供RDD方法,让你希望保留聚类列分组和排序。他们被称为spanBy/spanByKey:https://github.com/datastax/spark-cassandra-connector/blob/master/doc/3_selection.md#grouping-rows-by-partition-key

相关问题