我使用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)
我仅使用官方文档执行这些步骤。所以有人能解释我哪里出错了吗?提前致谢。 :)
答案 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)
答案 3 :(得分:0)
Apache Spark的2.2.0 version
存在一些问题。我将2.2.1 version
替换为最新版本,当我sc
通过spark
spark-shell
时,我可以自动获取cmd
和windows 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)
注意:主网址应为本地[*]