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

Unable to create SparkContext object using Apache Spark 2.2 version

我用微软 Windows 7.

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

当我尝试使用 Spark 2.2 时,我没有自动获得 sc,因此我通过执行以下步骤创建了一个:

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) 

错误:

Value parallelize is not a member of org.apache.spark.SparkConf  

我仅使用官方文档按照这些步骤操作。那么有人可以解释我哪里出错了吗?提前致谢。 :)

问题是您创建的 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)  

这会给你想要的结果。

如果 spark-shell 在启动时不显示此行:

Spark context available as 'sc' (master = local[*], app id = local-XXX).

运行

val sc = SparkContext.getOrCreate()

您应该更喜欢使用 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)

Apache Spark 2.2.0 version 存在一些问题。我用最新的 2.2.1 version 替换了它,当我通过 cmd 在 [=] 启动 spark-shell 时,我能够自动获得 scspark 变量17=]。我希望它能帮助别人。
我执行了下面创建 rdd 的代码,它工作得很好。无需导入任何包。

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

你的代码应该像这样

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

注意:master url 应该是 local[*]