2017-03-07 37 views
0

我有一個斯卡拉陣列「visitedArray」與值如下:斯卡拉陣列爲String,地圖[字符串,任何]

Array(
    (Map(url -> http://www.tumblr.com/tagged/abc), Map(visited -> true)), 
    (Map(url -> http://www.tumblr.com/tagged/random-blog), Map(visited -> true)), 
    (Map(url -> http://www.livestream.com/forum/1),Map(visited -> false)) 
    .... 

但是,我想將其轉換爲字符串,地圖[字符串,任何]和想要的結果出現,如:

(
    (http://www.tumblr.com/tagged/kate-beckett, Map(visited -> true), 
    (http://www.tumblr.com/tagged/random-blog), Map(visited -> true) 
    .... 

我已經試過:

val testRdd = sc.parallelize(visitedArray) 
val formatedRdd = testRdd.map(t => (t._1("url"), t._2)) 

但是,它不會重新變成所需的格式。它返回:

Array(
    (http://www.tumblr.com/tagged/kate-beckett, Map(visited -> true), 
    (http://www.tumblr.com/tagged/random-blog), Map(visited -> true) 
    .... 

我怎樣才能達到我想要的(轉換爲字符串,地圖[字符串,任何]沒有陣列(

+0

你想一個數組或RDD? –

+0

我想將數組轉換爲RDD。 - > Array to [String,Map [String,Any]] – user3776105

+0

我不完全確定你爲什麼需要Spark在這裏。你是否從其他RDD獲得這些值? –

回答

0

如果我理解正確的話,你要想這

val a = Array(
    (Map("url" -> "http://www.tumblr.com/tagged/abc"), Map("visited" -> true)), 
    (Map("url" -> "http://www.tumblr.com/tagged/random-blog"), Map("visited" -> true)), 
    (Map("url" -> "http://www.livestream.com/forum/1"),Map("visited" -> false))) 

    a.map { 
    case (m1: Map[String, String], m2: Map[String, Boolean]) => 
     (m1("url"), m2) 
    } 

導致該

Array(
    ("http://www.tumblr.com/tagged/abc", Map("visited" -> true)), 
    ("http://www.tumblr.com/tagged/random-blog", Map("visited" -> true)), 
    ("http://www.livestream.com/forum/1", Map("visited" -> false)) 
): Array[(String, Map[String, Boolean])] 

然後你可以sc.parallelize

您在開始時只看到Array,因爲這是Scala如何打印對象。這實際上不是

例如,「部分數據」,使用List

a.map { 
    case (m1: Map[String, String], m2: Map[String, Boolean]) => 
     (m1("url"), m2) 
    } toList 

List(
    ("http://www.tumblr.com/tagged/abc", Map("visited" -> true)), 
    ("http://www.tumblr.com/tagged/random-blog", Map("visited" -> true)), 
    ("http://www.livestream.com/forum/1", Map("visited" -> false)) 
): scala.package.List[(String, Map[String, Boolean])] 
+0

我需要類似val newRdd:(String,Map [String,Boolean])= a.map {case(a:Map [String,String],b: Map [String,Boolean])=> (a(「url」),b) }但這不起作用,因爲 fou nd:org.apache.spark.rdd.RDD [(String,Map [String,Boolean]) required:(String,Map [String,Boolean]) – user3776105

+0

您正在將Spark API與Scala混淆......對於'a。 map'返回一個RDD,然後1)'a'必須是一個RDD本身2)你需要在'map'操作中返回一個RDD –

相關問題