데이터 집합의 조바꿈을 스칼라로 가져 가고 싶습니까?스칼라에서 데이터 세트의 조 변경 방법?
내 csv 파일은, 내가 같은 결과를 필요
a,b,c,d
e,f,g,h
i,j,k,l
m,n,o,p
,
a,e,i,m
b,f,j,n
c,g,k,o
d,h,l,p
그것을 위해
데이터 집합의 조바꿈을 스칼라로 가져 가고 싶습니까?스칼라에서 데이터 세트의 조 변경 방법?
내 csv 파일은, 내가 같은 결과를 필요
a,b,c,d
e,f,g,h
i,j,k,l
m,n,o,p
,
a,e,i,m
b,f,j,n
c,g,k,o
d,h,l,p
그것을 위해
하나 라이너 내가 불꽃의 일을 생각한다 .
val a = List(
List('a', 'b', 'c', 'd'),
List('e', 'f', 'g', 'h'),
List('i', 'j', 'k', 'l'),
List('m', 'n', 'o', 'p')
)
val b = sc.parallize(a,1)
b.flatMap(_.zipWithIndex)
.groupBy(_._2)
.mapValues(_.map(_._1))
.collectAsMap()
.toList
.sortBy(_._1)
.map(_._2)
//> List[Iterable[Char]] = List(
// List(a, e, i, m), List(b, f, j, n), List(c, g, k, o), List(d, h, l, p))
각 색인의 각 요소를 색인으로 압축 한 다음 해당 색인별로 그룹화하십시오. 그래서 우리는 0 -> <list of (elements, index) at that index>
지도를 가지고 있습니다. 값을 값 목록으로 변환하십시오. 그런 다음 결과를 목록으로 변환하십시오 (collectAsMap
인지도를 통해 RDD
에는 .toList
이 없음). 색인으로 정렬 할 수 있습니다. 그런 다음 색인으로 정렬하고 요소 값만 추출하십시오 (다른 맵으로).
사용 transpose
방법 :
val a = List(
List('a', 'b', 'c', 'd'),
List('e', 'f', 'g', 'h'),
List('i', 'j', 'k', 'l'),
List('m', 'n', 'o', 'p')
)
a.transpose
//List(
// List(a, e, i, m),
// List(b, f, j, n),
// List(c, g, k, o),
// List(d, h, l, p))
My Input is List [], RDD []를 원한다. – rosy
에있는 각 요소는 RDD의 크기가 될 것입니다. List of Lists 또는 RDD 목록을 원하십니까? –
출력으로 원하는 것을 알아야합니다. "명백한"해결책은'RDD [List [Char]]'를 제공하지만 목록은 RDD의 모든 행에 대해 하나의 항목이 될 것입니다. 그래서 나는 당신이'transpose'를 사용하기를 원하지 않는다고 생각하거나리스트 [RDD [Char]]' –