2016-03-21 55 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

相關問題