스칼라의 Array의 transpose는 행렬 연산과 관련된 메소드이다.
M X N의 행렬을 N X M의 행렬로 변경한다.
<코드 #1>
val x = Array(Array(1,2), Array(3,4))
val z = x.transpose
<결과 #1>
x: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))
z: Array[Array[Int]] = Array(Array(1, 3), Array(2, 4))
<코드 #2>
val x = Array(Array(1,2), Array(3,4), Array(5,6))
val z = x.transpose
<결과 #2>
x: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4), Array(5, 6))
z: Array[Array[Int]] = Array(Array(1, 3, 5), Array(2, 4, 6))
<코드 #3>
val a = Map (
10 -> List("20x", "10y", "10z"),
29 -> List("29a", "29b", "29c")
)
val b = a.map { case (k, v) =>
v.map(k -> _)
}
val c = b.toList
val d = c.transpose
val e = d.map(_.toMap)
<결과 #4>
a: scala.collection.immutable.Map[Int,List[String]] = Map(10 -> List(20x, 10y, 10z), 29 -> List(29a, 29b, 29c))
b: scala.collection.immutable.Iterable[List[(Int, String)]] = List(List((10,20x), (10,10y), (10,10z)), List((29,29a), (29,29b), (29,29c)))
c: List[List[(Int, String)]] = List(List((10,20x), (10,10y), (10,10z)), List((29,29a), (29,29b), (29,29c)))
d: List[List[(Int, String)]] = List(List((10,20x), (29,29a)), List((10,10y), (29,29b)), List((10,10z), (29,29c)))
e: List[scala.collection.immutable.Map[Int,String]] = List(Map(10 -> 20x, 29 -> 29a), Map(10 -> 10y, 29 -> 29b), Map(10 -> 10z, 29 -> 29c))
<코드 #5>
val test = """
a 1
b 2
"""
val a = test.split('\n').filter(!_.trim.isEmpty)
val b = a.map(_.split("[ ]+"))
val c = b.transpose
val d = c.map(_.mkString("x"))
<결과 #5>
a: Array[String] = Array(a 1, b 2)
b: Array[Array[String]] = Array(Array(a, 1), Array(b, 2))
c: Array[Array[String]] = Array(Array(a, b), Array(1, 2))
d: Array[String] = Array(axb, 1x2)
'scala' 카테고리의 다른 글
[spark] spark의 OutOfMemoryError 발생시 (0) | 2017.02.24 |
---|---|
[spark] spark summit 자료 (0) | 2017.02.22 |
[spark1.6] rdd를 dataframe으로 만드는 방법 (0) | 2017.02.14 |
[spark] foreachPartition 예시 (0) | 2017.02.14 |
[zepplin] 여러 spark context 사용하기 (0) | 2017.02.14 |