2014-09-19 6 views
2

내 프로그램 the examples 같이 filter을 추가하려고 :왜 JavaSparkContext가있는 필터에 대해 누락 된 매개 변수 유형으로 인해 Scala 컴파일러가 실패합니까?

[info] Compiling 1 Scala source to /home/siva/file1/target/scala-2.10/classes... 
[error] /home/siva/file1/src/main/scala/com/chimpler/example/twitter/Tweet.scala:27: missing parameter type 
[error]  val numAs = twitterFeed.filter(line => line.contains(value)) 
[error]         ^
[error] one error found 
[error] (compile:compile) Compilation failed 
[error] Total time: 5 s, completed 19 Sep, 2014 1:31:26 PM 

어떤 아이디어를 다음과 같이

val logFile = "/tmp/master.txt" 
val sc = new JavaSparkContext("local[4]", "Twitter Analyzer", "/home/welcome/Downloads/spark-1.1.0/",Array("target/scala-2.10/Simple-assembly-0.1.0.jar")) 
val twitterFeed = sc.textFile(logFile).cache() 

while (iterator.hasNext) { 
    val value = iterator.next() 
    val numAs = twitterFeed.filter(line => line.contains(value)) 
    numAs.saveAsTextFile("/tmp/output/positive/" + value) 
} 

나는 컴파일 오류가?

+0

무엇이'twitterFeed'입니까? 이 예제에서 링크 된 파일은 문자열의 일부입니다. 귀하의 경우에는 다른 것이므로, 더 이해하기 쉽도록 질문을 편집해야합니다. –

+0

@EndeNeu 예제에서 주어진 것과 같은 줄을 사용하더라도 val file = spark.textFile ("hdfs : // ...") val errors = file.filter (line => line.contains ("ERROR")) 같은 위치에서 여전히 같은 오류를줍니다. – Siva

+1

"스칼라 대신 JavaRDD 및 _works를 Java 콜렉션과 함께 반환하는 SparkContext의 Java 친화적 버전" 이것은 [JavaSparkContext의 API 설명] (http://spark.apache.org/docs/latest/api/java/org/apache/spark/api/java/JavaSparkContext.html)입니다. 대신 SparkContext를 시도해보십시오. 자세한 설명은 – groverboy

답변

4

As @groverboy advised in the comment 대신 실제로 org.apache.spark.SparkContext을 사용해야합니다. Spark Programming Guide의 Initializing Spark도 이에 대해 명확합니다.

import org.apache.spark._ 

val conf = new SparkConf() 
    .setMaster("local[4]") 
    .setAppName("Twitter Analyzer") 
    .setSparkHome("/home/welcome/Downloads/spark-1.1.0/") 
    .setJars(Seq("target/scala-2.10/Simple-assembly-0.1.0.jar")) 
val sc = new SparkContext(conf) 

이유는 line 파라미터의 타입을 추론하는 Context 형 필요 스칼라 타입 추론이다.

val numAs = twitterFeed.filter(line => line.contains(value)) 

그것은 분명 String 타입이지만 SparkContext의 자바 버전 사용 - JavaSparkContext을 - 당신은 단순히 형식 정보를 잃게됩니다. 심지어

val numAs = twitterFeed.filter(_.contains(value)) 

나 :

twitterFeed.filter(_ contains value) 

모든 케이크를 단지 SparkContext 멀리

는 당신이 더 단순화 될 수 SparkContext 위의 줄을 사용 제공.

+0

+1입니다. – groverboy

2
val numAs = twitterFeed.filter((i: String) => i.contains(value)) 

이 문제를 해결했습니다.