无法使用 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
时,我能够自动获得 sc
和 spark
变量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[*]
我用微软 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
时,我能够自动获得 sc
和 spark
变量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[*]