2016-09-18 6 views
0

입력 텍스트 파일을 키/값 RDD로 변환하려고하지만 아래 코드가 작동하지 않습니다 (텍스트 파일은 탭으로 구분 된 파일입니다). 스칼라와 스파크 그래서 당신의 도움에 정말 감사드립니다.spark에서 스칼라를 사용하여 데이터 변환

import org.apache.spark.{SparkConf, SparkContext} 
import scala.io.Source 

object shortTwitter { 

    def main(args: Array[String]): Unit = { 
    for (line <- Source.fromFile(args(1).txt).getLines()) { 
     val newLine = line.map(line => 
     val p = line.split("\t") 
     (p(0).toString, p(1).toInt) 
    ) 
} 

    val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]") 
    val sc = new SparkContext(sparkConf) 
    val text = sc.textFile(args(0)) 
    val counts = text.flatMap(line => line.split("\t")) 
    } 
} 
+0

"아래 코드는 작동하지 않습니다"- 어떻게 그렇게 할 수 있습니까? 실패 란 무엇입니까? –

답변

1

그래서, 당신은 결과 RDD이 유형 RDD[(String, Int)]을 갖고 싶어 있으리라 믿고있어 -

  • 당신은 ((하나의 새로운 기록에 각 레코드를 변환) map하지 flatMap를 사용해야하는 당신은 튜플
split의 결과를 매핑해야
  • 여러으로 각 레코드를 변환 기록) 전부

    : 코멘트에 해명 당

    val counts = text 
        .map(line => line.split("\t")) 
        .map(arr => (arr(0), arr(1).toInt)) 
    

    편집 : 당신은 또한 (파일을 순차적으로 읽는) 비 스파크 부분을 고정에 관심이 있다면, 당신은 몇 가지 오류가있는-이해를위한 구문은 다음과 같습니다.

    def main(args: Array[String]): Unit = { 
        // read the file without Spark (not necessary when using Spark): 
        val countsWithoutSpark: Iterator[(String, Int)] = for { 
        line <- Source.fromFile(args(1)).getLines() 
        } yield { 
        val p = line.split("\t") 
        (p(0), p(1).toInt) 
        } 
    
        // equivalent code using Spark: 
        val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]") 
        val sc = new SparkContext(sparkConf) 
        val counts: RDD[(String, Int)] = sc.textFile(args(0)) 
        .map(line => line.split("\t")) 
        .map(arr => (arr(0), arr(1).toInt)) 
    } 
    
  • +0

    그 외에도 '간단한 표현식의 잘못된 시작, val p = line.split ("\ t")'이 오류로 표시됩니다. 이 오류로 인해 나는 코드를 전혀 실행할 수 없다. – tobby

    +1

    오, 나는 그 코드가 단지 당신이 스파크로 무엇을하려하는지 명확히하기위한 것이라고 생각했다. 나는 두 부분을 모두 사용하지 않는다는 것을 알았다. 스파크를 사용하여 같은 작업을 수행합니다 ... 어쨌든 - 업데이트 된 답변을 참조하십시오. –

    +0

    감사합니다. 두 번째 부분은 다른 작업을 수행하는 코드입니다. 혼란과 죄송합니다 .. 그리고 하나 더 질문! 'print'를 사용하여 스파크없이 코드의 결과를 어떻게 확인할 수 있습니까? – tobby

    관련 문제