我有一个带有列的 Cassandra 表 XYX(id uuid,插入时间戳,标题文本)
其中 id 和 insert 是复合主键。
我正在使用 Dataframe,在我的 spark shell 中,我正在获取 id 和 header 列。我想根据 id 和标题列有不同的行。
由于 Spark Cassandra 连接器确保给定 Cassandra 分区的所有行都在同一个 Spark 分区中,因此我看到了很多改组,但情况并非如此。
获取后,我使用 dropDuplicates 来获取不同的记录。
Spark Dataframe API目前还不支持自定义分区程序。因此连接器无法将 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")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句