2016-01-20 85 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