2014-12-04 32 views
0

我使用movielens数据集以电影信息加载到火花程序,并使用下面的代码段火花程序行为不同基于--master被设置为本地[4]或纱线的客户端

import org.apache.spark.{SparkConf, SparkContext} 

object MovieApp { 

    def main(args: Array[String]) { 

    val conf = new SparkConf().setAppName("movie-recommender") 
    val sc = new SparkContext(conf) 


    val movieFile = "/mnt/DATASETS/ml-1m/movies.dat" 

    val movieData = sc.textFile(movieFile) 

    val movies = movieData.map(_.split("::") match { case Array(movieid, title, genres) => 
     val genreList = genres.split("|") 
     (movieid, title, genreList) 
    }) 

    println("Num movies:" + movies.count()) 

    movies.foreach { case movielist => 
     println("ID:" + movielist._1 + "Title:" + movielist._2) 
    } 
    } 
} 
打印相同的

当运行使用命令 代码火花提交--master本地[4] --class“MovieApp”电影recommender.jar我得到预期的输出作为

*根@ philli毫升]#/usr/lib/spark/bin/spark-submit --master local [4] --class“MovieApp”movie-recommender_2.10-1.0.jar

14/12/05 0点17分37秒WARN NativeCodeLoader:无法加载原生的Hadoop库平台...使用内置的Java类适用

民的电影:3883

ID:2020名称:危险关系(1988)

ID:2021标题:沙丘(1984)

ID:2022标题:2023标题:教父:基督所述的(1988)

ID的最后的诱惑部分III,The(1990)

ID:2024标题:着迷,该(1991)

ID:2025标题:洛丽塔(1997)

ID:2026标题:扰动行为(1998)

ID:2027标题:黑手党! (1998年)

ID:2028标题:拯救大兵瑞恩(1998)

ID:2029标题:比利的好莱坞银幕初吻(1997)

... *

但是当我使用命令运行Hadoop集群上相同

火花提交--master纱线客户--class“MovieApp”电影recommender.jar输出是如下(没有电影细节???)

不同10

* [@根毫升philli]#/ usr/lib中/火花/ bin中/火花提交--master纱线客户--class “MovieApp” 电影recommender_2.10-1.0.jar

14/12/05 00:21:05 WARN NativeCodeLoader:无法为您的平台加载native-hadoop库...在适用的情况下使用内置java类 14/12/05 00:21:07 WARN BlockReaderLocal:短路本地读取功能无法使用,因为libhadoop无法加载。 --args已弃用。改用--arg。 民的电影:3883 [根@ philli毫升]#*

为什么要运行它作为当地VS群集上的程序变更的行为....我建立了火花1.1.1 Hadoop的使用命令

mvn -Pyarn -Phadoop-2.4 -Ddodoop.version = 2.4。0 -DskipTests干净 包

我使用的集群HDP2.1

样品movies.dat文件如下:

1 ::玩具总动员(1995年)::动画|儿童|喜剧

2 ::勇敢者的游戏(1995)::冒险|儿童|幻想

3 :: Grumpier老无所依(1995年)::喜剧|爱情

4 ::等待呼出(1995年)::喜剧|剧情

5 ::新娘第II的父亲(1995年)::喜剧

6 ::热(1995年)::动作|犯罪|惊悚

7 ::萨布丽娜(1995年)::喜剧|爱情

8 ::汤姆·哈克(1995)::冒险|儿童

9 ::猝死(1995 )::行动

10 ::黄金眼(1995)::动作|冒险|惊悚

回答

1

当您在群集上运行该程序,foreach关闭将在工人执行,因此println发生,但在工作人员的stdout上,而不是在驱动程序上。

查看纱线日志,你会发现预期的输出。

+0

哦,这是有道理的......嗯,所以如果我想在驱动程序中的数据,那么我将不得不使用take()。 – gurram 2014-12-10 15:25:32

相关问题