Apache spark 删除重复项而不进行随机播放
我有一个带有列的Cassandra表XYX( id uuid, 插入时间戳, 标题(文本) 其中id和insert是复合主键 我使用Dataframe,在spark shell中获取id和标题列。 我希望根据id和标题列有不同的行 因为Spark Cassandra连接器确保给定Cassandra分区的所有行都在同一个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
获取后,我使用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")