Spark中RDD的反转

Posted

技术标签:

【中文标题】Spark中RDD的反转【英文标题】:Inversing of an RDD in spark 【发布时间】:2017-05-06 15:24:01 【问题描述】:

我有一个 RDD[(timestamp,(a,b,c))] 如下:

Timestamp   a       b       c
5:00 PM      523    384      40
6:00 PM      384    60     nan

我需要将上面的RDD转换为下面的RDD

key  values
a    [523,384]
b    [384,60]
c    [40,nan]

在 spark 中实现上述功能的最有效方法是什么?

【问题讨论】:

【参考方案1】:
     val raw = spark.sparkContext.parallelize(Seq(
      ("5:00 PM","523" ,"384" ,"40"),
      ("6:00 PM","384","60","nan")))
      .toDF("Timestamp", "a", "b","c")

    // drop timestamp column 
    val data = raw.drop("Timestamp")

    // iterate through columns and return value as tuple 
    val newData = data.columns.map(colName =>
       (colName, data.select(colName).map(r=>r.getAs[String](0)).collect())
    )
    // create a new Datafrane
    val finalData = spark.sparkContext.parallelize(newData).toDF("key", "value")

    finalData.show()

【讨论】:

以上是关于Spark中RDD的反转的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache Spark 中反转排列 DataFrame

数据算法 --hadoop/spark数据处理技巧 --(3.左外连接 4.反转排序)

如何查看spark中rdd的内容

为啥我的每个单词反转代码不反转某些单词?

不反转数字的字符反转[关闭]

Java中如何实现字符串反转?