创建键/值 - 数组对Scala / Spark

时间:2017-10-16 17:07:12

标签: scala apache-spark bigdata

如何在Scala中创建键/值数组对。我的意思是代替价值我需要一个数组。

val newRdd1 = rdd1.flatMap(x=>x.split(" "))
   .map({case (key, Array(String)) => Array(String) })

1 个答案:

答案 0 :(得分:-1)

你可以使用map()来实现它,它在普通的scala程序或Scala-in-SparkContext中都是类似的。

示例,您有一个字符串列表:

var sRec = List("key1,a1,a2,a3", "key2,b1,b2,b3", "key3,c1,c2,c3")

你可以分开它和它转换为键/值(字符串数组),假设键位于​​第0位,使用:

sRec.map(x => (x.split(",")(0), Array(x.split(",")(1), x.split(",")(2), x.split(",")(3)))).
        foreach(println)

(key1,[Ljava.lang.String;@7a81197d)
(key2,[Ljava.lang.String;@5ca881b5)
(key3,[Ljava.lang.String;@24d46ca6)

如果要按键读取特定的数组元素:

sRec.map(x => (x.split(",")(0),Array(x.split(",")(1), x.split(",")(2), x.split(",")(3)))).
        map(x => (x._1, x._2(0))).foreach(println)

输出:

(key1,a1)
(key2,b1)
(key3,c1)