【问题标题】:Remove Duplicates without shuffle Spark无需随机播放 Spark 即可删除重复项
【发布时间】:2017-08-10 06:41:17
【问题描述】:

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

其中 id 和 insert 是复合主键。

我正在使用 Dataframe,并在我的 spark shell 中获取 id 和 header 列。 我想根据 id 和 header 列有不同的行。

我看到很多 shuffle 情况并非如此,因为 Spark Cassandra 连接器确保给定 Cassandra 分区的所有行都在同一个 spark 分区中。

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

【问题讨论】:

    标签: apache-spark spark-cassandra-connector


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2014-04-02
      • 1970-01-01
      • 2011-11-10
      相关资源
      最近更新 更多