无法使用Apache Spark 2.2版本创建SparkContext对象

时间:2017-12-24 14:28:33

标签: scala apache-spark windows-7

我使用MS Windows 7。

最初,我在Spark 1.6中使用scala尝试了一个程序,它运行正常(我自动将SparkContext对象作为sc)。

当我尝试Spark 2.2时,我没有自动获取http.createServer((req, res) => { const urlP = url.parse(req.url, true); let fibo; res.writeHead(200, {'Content-Type': 'text/plain'}); if (urlP.query['n']) { fibonacciAsync(urlP.query['n'], function(data) { res.end('Fibonacci ' + urlP.query['n'] + '=' + data); }); } }).listen(8124, '127.0.0.1'); 所以我通过执行以下步骤创建了一个:

sc

现在当我尝试执行下面的parallelize方法时,它给了我一个错误:

import org.apache.spark.SparkContext  
import org.apache.spark.SparkConf  
val sc = new SparkConf().setAppName("myname").setMaster("mast")  
new SparkContext(sc) 

错误:

val data = Array(1, 2, 3, 4, 5)  
val distData = sc.parallelize(data) 

我仅使用官方文档执行这些步骤。所以有人能解释我哪里出错了吗?提前致谢。 :)

5 个答案:

答案 0 :(得分:2)

如果 spark-shell 在开始时没有显示此行:

  

Spark上下文可用作≻#sc; (master = local [*],app id = local-XXX)。

运行

val sc = SparkContext.getOrCreate()

答案 1 :(得分:1)

问题是您创建的sc类型为SparkConfig而不是SparkContext(两者都有相同的缩写)。

对于在Spark 2.0版本或任何其他版本中使用parallelize方法,sc应为SparkContext而不是SparkConf。正确的代码应该是这样的:

import org.apache.spark.SparkContext  
import org.apache.spark.SparkConf  
val sparkConf = new SparkConf().setAppName("myname").setMaster("mast")  
val sc = new SparkContext(sparkConf)
val data = Array(1, 2, 3, 4, 5)  
val distData = sc.parallelize(data)  

这将为您提供所需的结果。

答案 2 :(得分:0)

您应该更喜欢使用SparkSession,因为它是版本2中Spark的入口点。您可以尝试类似:

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder.
    master("local")
    .appName("spark session example")
    .getOrCreate()
val sc = spark.sparkContext
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

This is what I tried in Databricks

答案 3 :(得分:0)

Apache Spark的2.2.0 version存在一些问题。我将2.2.1 version替换为最新版本,当我sc通过spark spark-shell时,我可以自动获取cmdwindows 7个变量1}}。我希望它会对某人有所帮助 我执行下面的代码创建rdd,它完美地工作。无需导入任何包。

val dataOne=sc.parallelize(1 to 10)
dataOne.collect(); //Will print 1 to 10 numbers in array

答案 4 :(得分:0)

你的代码不喜欢这样

val conf = new SparkConf()
conf.setMaster("local[*]")
conf.setAppName("myname")
val sc = new SparkContext(conf)

注意:主网址应为本地[*]