2017-05-04 47 views
-1

我正在Scala中開發一個Spark應用程序,並想知道將其並行化並在hadoop集羣上運行的最佳方法。我的代碼會從hdfs文件中讀取每一行,解析它並生成多個記錄(對於每行),我將其作爲一個case類存儲。我已經在getElem()方法中編寫了完整的邏輯,並按預期工作。在斯卡拉設計並行化Spark應用程序的最佳方法

現在,我想計算所有輸入記錄的邏輯並將響應存儲到hdfs位置。

請讓我知道我該如何處理spark和整合爲輸入生成的所有相應輸出記錄並寫入HDFS。

 object testing extends Serializable { 
     var recordArray=Array[Record](); 
     def main(args:Array[String]) 
     { 

     val conf = new SparkConf().setAppName("jsonParsing").setMaster("local") 
     val sc = new SparkContext(conf) 
     val sqlContext= new SQLContext(sc) 

     val input=sc.textFile("hdfs://loc/data.txt") 
    // input.collect().foreach(println) 
     input.map(data=>getElem(parse(data,false),sc,sqlContext)) 

    } 
      //method definition 
    def getElem(json:JValue)={ 

     // Parses the json and creates array of datasets for each input record and stores the data in case class 
    val x= Record("xxxx","xxxx","xxxx","xxxx","xxxx","xxxx","xxxx","xxxx","xxxx","xxxx") 
      } 
    case class Record(summary_key: String, key: String,array_name_position:Int,Parent_Level_1:String,Parent_level_2:String,Parent_Level_3:String,Parent_level_4:String,Parent_level_5:String, 
     param_name_position:Integer,Array_name:String,paramname:String,paramvalue:String) 
      } 
+0

你測試了你的代碼嗎?我懷疑它是一個完整的工作代碼。 –

+0

@RameshMaharjan是的,邏輯工作在斯卡拉 –

+0

具體是什麼問題?既然你似乎已經想出瞭如何正確解析記錄(你聲稱getElem正在工作,你喜歡),那麼你唯一的問題是保存結果?您想以什麼格式保存數據? – puhlen

回答

1

你說你有工作case class和你有parsedinput text filehdfs和coverted到record case class
然後轉換爲dataframedataset很容易通過使用.toDF().toDS()
現在的任務左邊只是寫case class rdddataframedatasethdfs
撰寫案例類RDD到HDFS:
只是通話.saveAsTextFile() API和你給從hdfs
讀取要寫入數據幀或數據集HDFS你可以給路徑output directory
,您可以使用databricks API .write.format("com.databricks.spark.csv").save()在那裏你可以給輸出HDFS目錄名

我希望這有助於

注:我猜你是通過ide運行代碼。你應該學會​​更多信息可以在here

+0

謝謝。是的,我通過IDE運行它。我不想在處理每一個輸入行後將記錄轉儲到HDFS,這樣它會創建很多部分文件。我想處理所有輸入記錄,然後將輸出轉儲到HDFS。但是,用我的上面的代碼getElem方法永遠不會被調用 –

+0

有了上面的代碼,它甚至沒有達到它可以運行getElem的程度,因爲它不會被編譯。解決您的問題,我們無法猜測您實際運行的代碼是什麼 - 但它肯定不是您問題中的內容 –

+0

@sun_dare,**您必須使用解析方法更新您的問題,以便測試它併發布你完整的答案**。順便說一下,你可以使用'coalesce'來獲得單一輸出。你必須瞭解[轉化和行動](https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-rdd-transformations。HTML),以便了解火花是如何工作的。 –