删除没有随机Spark的重复项

时间:2017-03-18 19:40:21

标签: apache-spark spark-cassandra-connector

我有一个带有列的Cassandra表XYX( id uuid, 插入时间戳, 标题文字)

其中id和insert是复合主键。

我正在使用Dataframe,在我的spark shell中我提取了id和header列。 我想根据id和header列创建不同的行。

由于Spark Cassandra连接器确保给定Cassandra分区的所有行都在同一个spark分区中,因此我看到很多次洗牌并非如此。

在使用dropDuplicates获取不同的记录之后我获取了它。

1 个答案:

答案 0 :(得分:0)

Spark Dataframe API尚不支持自定义分区程序。因此Connector无法将C *分区程序引入Dataframe引擎。 RDD Spark API支持另一方面的自定义分区程序。因此,您可以将数据加载到RDD中,然后将其转换为df。 以下是有关C *分区程序用法的连接器文档: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")