cod*_*ure 10 scala intellij-idea apache-spark apache-spark-sql
我在IntelliJ中有以下工作表:
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
/** Lazily instantiated singleton instance of SQLContext */
object SQLContextSingleton {
@transient private var instance: SQLContext = _
def getInstance(sparkContext: SparkContext): SQLContext = {
if (instance == null) {
instance = new SQLContext(sparkContext)
}
instance
}
}
val conf = new SparkConf().
setAppName("Scala Wooksheet").
setMaster("local[*]")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val df = sqlContext.read.json("/Users/someuser/some.json")
df.show
Run Code Online (Sandbox Code Playgroud)
此代码在REPL中工作,但似乎只是第一次运行(带有其他一些错误).每次后续,错误是:
16/04/13 11:04:57 WARN SparkContext: Another SparkContext is being constructed (or threw an exception in its constructor). This may indicate an error, since only one SparkContext may be running in this JVM (see SPARK-2243). The other SparkContext was created at:
org.apache.spark.SparkContext.<init>(SparkContext.scala:82)
Run Code Online (Sandbox Code Playgroud)
如何找到已使用的上下文?
注意:我听到其他人说要使用,conf.set("spark.driver.allowMultipleContexts","true")但这似乎是增加内存使用量的解决方案(如未收集的垃圾).
有没有更好的办法?
tom*_*kas 10
我在使用IntelliJ IDEA(CE 2016.3.4)中的Scala工作表中的Spark执行代码时遇到了同样的问题.
重复Spark上下文创建的解决方案是取消选中Settings - > Languages and Frameworks - > Scala - > Worksheet中的'在编译器进程中运行工作表'复选框.我还测试了其他工作表设置,它们对重复Spark上下文创建的问题没有影响.
我也没有放入sc.stop()工作表.但是我必须在conf中设置master和appName参数才能工作.
以下是Spark Quick Start的 SimpleApp.scala代码的Worksheet版本
import org.apache.spark.{SparkConf, SparkContext}
val conf = new SparkConf()
conf.setMaster("local[*]")
conf.setAppName("Simple Application")
val sc = new SparkContext(conf)
val logFile = "/opt/spark-latest/README.md"
val logData = sc.textFile(logFile).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
Run Code Online (Sandbox Code Playgroud)
我使用了指南中的相同simple.sbt将依赖项导入IntelliJ IDEA.
IntelliJ CE 2017.1的更新(REPL模式下的工作表)
在2017.1中,Intellij为Worksheet引入了REPL模式.我已经通过选中"使用REPL"选项测试了相同的代码.要运行此模式,您需要在上面描述的工作表设置中选中"在编译器进程中运行工作表"复选框(默认情况下是这样).
代码在Worksheet REPL模式下运行正常.
正如侦探袋在这篇 git 帖子中所述,您可以通过将工作表切换为仅在“eclipse 兼容模式”下运行来解决此问题:
1)开放偏好
2) 在语言和框架下选择 scala
3)在工作表选项卡下取消选中除“使用“eclipse兼容性”模式”之外的所有内容
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |