2017-10-13 9 views
1

다음은 예제입니다.Spark에서 단어를 추가하는 좋은 방법이 있습니까?

데이터 집합 - dataset.txt

1 banana kiwi orange melon

코드 pairSet의 값을 추가 부품이 효율적 궁금

scala> val table = sc.textFile("dataset.txt").map(_.split(" ")) 

scala> table.take(1) 

res0: Array[Array[String]] = Array(Array(1, banana , kiwi , orange, melon)) 

scala> val pairSet = table.map{case Array(key,b,k,o,m) => (key, b+" "+k+" "+o+" "+m)} 

scala> pairSet.take(1) 

res1: Array[(String, String)] = Array((1, banana kiwi orange melon)) 

. 아니면 더 좋은 방법이 있습니까?

답변

1

& 첫 번째 발생으로 나눌 수 있습니다. key & value입니다.

val table = sc.textFile("dataset.txt").map { x => 
    val splits = x.split(" ",2) 
    (splits(0), splits(1)) 
} 
+0

답장을 보내 주셔서 감사합니다. 메소드가'내 메소드보다 효율적입니다. (b + ""+ k + ""+ o + ""(0) + m)'? –

+0

예, 귀하의 경우, 첫 번째 발생을 제외하고 나머지 문자열을 불필요하게 분할하여 나중에 다시 추가하기 때문입니다. – vdep

+0

오오 그렇습니다! 조언 해 주셔서 대단히 감사합니다! –

1

논리에 대한 접근 방식은 항상 배열에 동일한 양의 데이터가있는 경우에만 작동합니다. 이것을 시도해 볼 수도 있습니다. 이 거기에 사용하여

val table = sc.textFile("dataset.txt") 
val pairedDF = table.map{ line => 
         val array = line.split(" ", 2) 
         (array(0), array(1)) 
         } 

당신은 분할 후 크기가 고정 될하는 배열을 제한하지 않습니다.

호프가 제대로 작동하길 바랍니다.

감사합니다.

+0

답장을 보내 주셔서 감사합니다! 당신의 메서드는'(val + line.split ("", 2) (array (0), array (1))) + m)'? –

+0

[루프]는 첫 번째 공백을 가져온 후에 값을 분할하지 않기 때문에 가능합니다. –

+1

오 예! 조언 해 주셔서 대단히 감사합니다! –