2016-01-20 166 views
0

我想为此使用Spark scala API。我有以下格式的数据:Spark RDD:对数组进行排序

id1 val1, val2, val3 
id2 val1, val2, val3, val4, val5, val6 
id3 val1, val2, val3, val4 

所有vals都是整数,我希望对结果进行排序。例如,对于下面的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为: 数组[(字符串,数组[字符串])] =阵列((100,阵列(5 ),(1000,Array(14,11,10,12,13)))

现在我该如何适当地施放这个dummy_data,以便我可以将第二个值元件。

回答

0

mapValuessorted应该做的伎俩:

  • 斯卡拉:

    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])] 
    
+0

当我使用SC从文件中读取它。 textFile,它com es out org.apache.spark.rdd.RDD [(String,Seq [String])]而不是org.apache.spark.rdd.RDD [(String,Seq [Int])],什么是最有效的方式来正确地施展 - Seq(Int)? – user3803714

+0

只需用'_.map(_。toInt).sorted'替换'_.sorted' – zero323

+0

更新了问题。 – user3803714