2014-12-04 33 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

相關問題