Apache spark 删除重复项而不进行随机播放

Apache spark 删除重复项而不进行随机播放,apache-spark,spark-cassandra-connector,Apache Spark,Spark Cassandra Connector,我有一个带有列的Cassandra表XYX( id uuid, 插入时间戳, 标题(文本) 其中id和insert是复合主键 我使用Dataframe,在spark shell中获取id和标题列。 我希望根据id和标题列有不同的行 因为Spark Cassandra连接器确保给定Cassandra分区的所有行都在同一个Spark分区中,所以我看到了很多不同的混乱 获取后,我使用dropDuplicates获取不同的记录。Spark Dataframe API还不支持自定义分区。因此连接器无法将C

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

其中id和insert是复合主键

我使用Dataframe,在spark shell中获取id和标题列。 我希望根据id和标题列有不同的行

因为Spark Cassandra连接器确保给定Cassandra分区的所有行都在同一个Spark分区中,所以我看到了很多不同的混乱


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

Spark Dataframe API还不支持自定义分区。因此连接器无法将C*分区器引入数据帧引擎。 RDD Spark API从另一方面支持自定义分区器。因此,您可以将数据加载到RDD中,然后将其转换为df。 以下是关于C*分区器用法的连接器文档:

函数的作用是:定义用于分组的键列

下面是一个工作示例。它并不短,所以我希望有人能改进它:

//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")