2017-03-18 60 views
0

删除重复我有一个卡桑德拉表XYX与列( ID UUID, 插入时间戳, 标题文本)而不洗牌火花

其中ID和插入物是复合主键。

我正在使用Dataframe和我的火花外壳我正在提取id和标题列。 我想根据ID和标题列有不同的行。

我看到很多的混洗不是这种情况,因为Spark Cassandra连接器可以确保给定Cassandra分区的所有行都在同一个spark分区中。

提取后我使用dropDuplicates获取不同的记录。

回答

0

Spark Dataframe API还不支持自定义分区程序。因此,连接器无法将C *分区引入Dataframe引擎。 RDD Spark API支持另一方面的自定义分区程序。因此,您可以将数据加载到RDD中,然后将其转换为df。 这里是关于C *分区使用一个连接器DOC:https://github.com/datastax/spark-cassandra-connector/blob/master/doc/16_partitioning.md

keyBy()函数允许你定义键列用于分组

这里工作的例子。这并不短,所以我希望有人可以改进它:

//load data into RDD and define a group key 
val rdd = sc.cassandraTable[(String, String)] ("test", "test") 
    .select("id" as "_1", "header" as "_2") 
    .keyBy[Tuple1[Int]]("id") 
// check that partitioner is CassandraPartitioner 
rdd.partitioner 
// call distinct for each group, flat it, get two column DF 
val df = rdd.groupByKey.flatMap {case (key,group) => group.toSeq.distinct} 
    .toDF("id", "header")