【问题标题】:How to transform a CompactBuffer to List如何将 CompactBuffer 转换为 List
【发布时间】:2018-09-02 07:34:48
【问题描述】:

如何将 CompactBuffer 转换为 List?一个例子如下:

data.csv
1,Lokesh
2,Bhupesh
2,Amit
2,Ratan
2,Dinesh
1,Pavan
1,Tejas
2,Sheela
1,Kumar
1,Venkat
val r = sc.textFile("data96/data.csv")
val rm = r.map(x=>(x.split(",")(0), x.split(",")(1)))

val r_grp = rm.groupByKey

Array[(String, Iterable[String])] = Array((2,CompactBuffer(Bhupesh, Amit, Ratan, Dinesh, Sheela)), (1,CompactBuffer(Lokesh, Pavan, Tejas, 库马尔,文卡特)))

r_grp.foreach(println(_))
(1,CompactBuffer(Lokesh, Pavan, Tejas, Kumar, Venkat))
(2,CompactBuffer(Bhupesh, Amit, Ratan, Dinesh, Sheela))

所以,很容易得到 CompactBuffer 格式。下面会生成List格式的结果,就是我要呈现的。

val swapped = rm.map(item=>item.swap)

val com= rm.combineByKey(List(_), (x:List[String], y:String) =>y::x,(x:List[String], y:List[String])=>x:::y) //this is terrible to me, I don't want to do this way

Array[(String, List[String])] = Array((2,List(Dinesh, Ratan, Amit, Bhupesh, Sheela)), (1,List(Lokesh, Venkat, Kumar, Tejas, Pavan))))

com.repartition(1).saveAsTextFile("data96/s43")

生成的结果:

hdfs dfs -cat data96/s43/*
(2,List(Dinesh, Ratan, Amit, Bhupesh, Sheela))
(1,List(Lokesh, Venkat, Kumar, Tejas, Pavan))

以 CompactBuffer 格式获取结果要容易得多,但我需要获取 List 格式并且不想通过突出显示的可怕的混乱命令。

顺便问一下,如何进一步按 asc 或 desc 对每个组进行排序?

【问题讨论】:

  • 请指定您在标签中使用的语言
  • 您可以从代码中看出它是 Scala。 :),无论是 Scala 还是 Python 都无所谓。

标签: scala group-by rdd


【解决方案1】:

您可以简单地将CopmpactBuffer 更改为使用toList 方法列出

val r_grp = rm.groupByKey
// After groupBykey
(2,CompactBuffer(Bhupesh, Amit, Ratan, Dinesh, Sheela))
(1,CompactBuffer(Lokesh, Pavan, Tejas, Kumar, Venkat))

只需使用 toList 转换为 List 并使用 sortBy 对其进行排序

val com = r_grp.map(x => (x._1, x._2.toList.sortBy(x => x)))
com.foreach(println)

输出:

(1,List(Kumar, Lokesh, Pavan, Tejas, Venkat))
(2,List(Amit, Bhupesh, Dinesh, Ratan, Sheela))

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 2018-12-27
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多