我想为此使用Spark scala API。我有以下格式的数据:
id1 val1, val2, val3
id2 val1, val2, val3, val4, val5, val6
id3 val1, val2, val3, val4
所有的val都是整数,我希望对结果进行排序。例如,对于以下i / p
1 100, 20, 150
10 50, 1000, 2, 400
结果应该是:
1 20, 100, 150
10 2, 50, 400, 1000
任何帮助都会很棒!
以下是读取文件的代码:
val dummy_data = sc.textFile("pato/to/file").map(line => ((line.split("\t"))(0), (line.split("\t"))(1).split(",")))
dummy_data.collect()
上面的代码给出了o / p: Array [(String,Array [String])] = Array((100,Array(5,2,4,3,1)),(1000,Array(14,11,10,12,13)))
现在我如何适当地投射这个dummy_data,以便我可以对第二个元素中的值进行排序。
答案 0 :(得分:0)
mapValues
的 sorted
可以解决问题:
Scala的:
sc.parallelize(Seq(
(1, Seq("100", "20", "150")), (10, Seq("50", "1000", "2", "400"))))
.mapValues(_.map(_.toInt).sorted)
.take(2)
// Array[(Int, Seq[Int])] =
// Array((1,List(20, 100, 150)), (10,List(2, 50, 400, 1000)))
的Python:
(sc.parallelize([(1, ("100", "20", "150")), (10, ("50", "1000", "2", "400"))])
.mapValues(lambda xs: sorted(int(x) for x in xs))
.take(2))
## [(1, [20, 100, 150]), (10, [2, 50, 400, 1000])]