gpt4 book ai didi

scala - 为什么 Scala 编译器会因缺少 JavaSparkContext 过滤器的参数类型而失败?

转载 作者:行者123 更新时间:2023-12-02 10:46:46 25 4
gpt4 key购买 nike

我正在尝试添加过滤器,如the examples所示到我的程序:

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)
}

我得到的编译错误如下:

[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

有什么想法吗?

最佳答案

As @groverboy advised in the comment你真的应该使用 org.apache.spark.SparkContext反而。 Spark 编程指南 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)

原因是 Scala 中的类型推断需要类型上下文来推断 line 参数的类型。

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

它显然是String类型,但是使用Java版本的SparkContext - JavaSparkContext - 您只是丢失了类型信息。

如果您使用SparkContext,上面的行可以进一步简化为:

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

甚至:

twitterFeed.filter(_ contains value)

所有好东西都在 SparkContext 之外。

关于scala - 为什么 Scala 编译器会因缺少 JavaSparkContext 过滤器的参数类型而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25929231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com