2014-10-08 2 views
2

Spark를 처음 사용하고 Wikipedia 덤프의 페이지 레코드를 RDD에로드하려고합니다.맞춤형 입력 리더기를 사용하십시오.

hadoop 스트리밍에 제공된 레코드 판독기를 사용했지만 사용법을 알 수 없습니다. 누구든지 다음 코드가 페이지 레코드가있는 멋진 RDD를 만들도록 도와 줄 수 있습니까?

import org.apache.hadoop.io.Text 
import org.apache.hadoop.streaming.StreamXmlRecordReader 

import org.apache.hadoop.mapred.JobConf 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 

object WikiTest { 

    def main(args: Array[String]) { 

    // configuration 
    val sparkConf = new SparkConf() 
     .setMaster("local[4]") 
     .setAppName("WikiDumpTest") 

    val jobConf = new JobConf() 
    jobConf.set("input", "enwikisource-20140906-pages-articles-multistream.xml") 
    jobConf.set("stream.recordreader.class", "org.apache.hadoop.streaming.StreamXmlRecordReader") 
    jobConf.set("stream.recordreader.begin", "<page>") 
    jobConf.set("stream.recordreader.end", "</page>") 

    val sparkContext = new SparkContext(sparkConf) 

    // read data 
    val wikiData = sparkContext.hadoopRDD(
     jobConf, 
     classOf[StreamXmlRecordReader], 
     classOf[Text], 
     classOf[Text]) 

    // count rows 
    println(wikiData.count) 
    } 
} 

Spark는 StreamXmlRecordReader 사용을 거부합니다. 나는 다음과 같은 오류가 발생합니다 : 나는 Eclispse의 경고를 무시하고 어쨌든 prgramm를 시작하면

[error] found : Class[org.apache.hadoop.streaming.StreamXmlRecordReader (classOf[org.apache.hadoop.streaming.StreamXmlRecordReader])

[error] required: Class[_ <: org.apache.hadoop.mapreduce.InputFormat[?,?]]

[error] classOf[StreamXmlRecordReader]

은 내가 java.lang.ClassNotFoundException가를 기록했다.

답변

2

classOf[StreamXmlRecordReader] 대신 classOf[org.apache.hadoop.streaming.StreamInputFormat]을 사용해야합니다.

java.lang.ClassNotFoundException은 클래스 WikiTest을 실행하려고하지만 컴파일 할 수 없기 때문에 존재하지 않습니다.

2

spark (StreamXmlRecordReader)에서 외부 종속성을 사용하려고하므로 java.lang.ClassNotFoundException이 발생했습니다. 뚱뚱한 항아리를 만들어 Spark에 배포해야합니다. parsing tutorial

: 당신이 문제 XML 파일을 구문 분석이있는 경우 당신이 여기에 모습을 가질 수 gradle fat jar tutorial 또한

:

이 항아리의이 유형을 만드는 방법에 대한 좋은 예이다