2017-05-04 46 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),以便了解火花是如何工作的。 –