【发布时间】: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 都无所谓。