2017-09-22 6 views
0
CASSANDRA_TABLE has (some_other_column, itemid) as primary key. 

val cassandraRdd: CassandraTableScanRDD[CassandraRow] = sparkSession.sparkContext 
    .cassandraTable(cassandraKeyspace, cassandraTable) 

cassandraRdd.take(10).foreach(println) 

Cette cassandraRdd a toutes les colonnes lues à partir de ma table cassandraSpark CassandraTableScanRDD KeyBy ne conserve pas toutes les colonnes

val temp1: CassandraTableScanRDD[((String), CassandraRow)] = cassandraRdd 
    .select("itemid", "column2", "column3") 
    .keyBy[(String)]("itemid") 
val temp2: CassandraTableScanRDD[((String), CassandraRow)] = cassandraRdd 
    .keyBy[(String)]("itemid") 
temp1.take(10).foreach(println) 
temp2.take(10).foreach(println) 

Les deux temp1 et temp2 ne retenez pas toutes les colonnes après cette opération de keyBy

((988230014),CassandraRow{itemid: 988230014}) 

Comment puis-je keyBy sur certaines colonnes et avoir CassandraRow conserve toutes les colonnes?

Répondre

0

Pour conserver partitionneur et obtenir des lignes sélectionnées, je dois lire des lignes de cassandra quelque chose comme ceci ci-dessous

val cassandraRdd: CassandraTableScanRDD[((String, String), (String, String, String))] = { 
    sparkSession.sparkContext 
    .cassandraTable[(String, String, String)](cassandraKeyspace, cassandraTable) 
    .select("some_other_column" as "_1", "itemid" as "_2", "column3" as "_3", "some_other_column", "itemid") 
    .keyBy[(String, String)]("some_other_column", "itemid") 
}