2016-03-21 2 views
0

Cassandra предоставляет свои разделы как многострочные строки, однако внутренне хранящиеся в виде рядов, и именно так я хотел бы работать с моими данными с помощью Spark.Как сделать перегородку Кассандры похожим на широкий ряд в Spark?

Чтобы быть более конкретным, я, так или иначе, получаю RDD разделов Cassandra или их данные.

Тогда я хотел бы сделать map операцию, и в замыкании, я хотел бы выразить что-то вроде этого:

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

псевдокода просто чтобы дать представление о том, простом разделении и принимая длину вектора.

Моя таблица будет

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, поэтому он должен храниться в искровом разделе, и он должен быть локально, поскольку все строки одного раздела будут включены тот же узел.

Я больше использую Scala с Spark, чем Python, поэтому давайте попробуем. Но я не проверял его. Я хотел бы предложить

рдд = sc.cassandraTable ('пространство ключей', 'стол') карта (лямбда-х:. ((X.dataset_name (x.parameter, значение, vector_value))) // создать ключ для группы по

rdd2 = отсортирован (rdd.groupByKey()) // groupByKey возвращает (ключ, итераторы), следовательно, сортируется, чтобы получить список

Look GroupBy/groupByKey функции

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

Вы получите один ряд за партити и внутри каждого раздела - список строк кластеризации. поэтому вы должны иметь доступ с [0] для первого появления, поэтому «параметр1», затем [1] для параметра «parameter2»

EDIT: коллега сказал мне, что разъем spark-cassandra обеспечивает методы RDD, чтобы сделать то, что вы хотите, т. е. сохранить группировку столбцов и упорядочение. Они называются spanBy/spanByKey: https://github.com/datastax/spark-cassandra-connector/blob/master/doc/3_selection.md#grouping-rows-by-partition-key