Spark RDD:排序数字数组

时间:2016-01-20 06:49:48

标签: apache-spark

我想为此使用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,以便我可以对第二个元素中的值进行排序。

1 个答案:

答案 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])]