2015-06-17 18 views
3

我有一個人對象,如下圖所示:堅持一個實體對象HDFS採用火花

Person person = new Person(); person.setPersonId("10"); person.setAge(20);

我想用星火將其保存在HDFS。它可以使用保存在火花數據框類的方法來實現如下圖所示:

dataFrame.save("hdfs://localhost:9000/sample.json");

,但我還沒有找到實體對象轉換爲RDDDataFrame

任何方法有什麼辦法轉換實體對象到RDD或DataFrame?

回答

3

我建議你將Person對象轉換爲List。 而SparkContext可以使用「並行化」API來轉換List RDD。 而且RDD可以使用「saveAsObjectFile」api通過序列文件保存到hdfs。 我想你用Java編碼。這是一個示例代碼,如下所示。

SparkConf sparkConf = new SparkConf().setAppName("SparkSaveToHDFS"); 
JavaSparkContext ctx = new JavaSparkContext(sparkConf); 

Person Peter = new Person(); 
Peter.setName("Peter"); 
Peter.setAge(30); 
Person Kevin = new Person(); 
Kevin.setName("Kevin"); 
Kevin.setAge(40); 

List<Person> personList = new ArrayList<Person>(); 
personList.add(0, Peter); 
personList.add(1,Kevin); 
System.out.println("list contains Peter : " + personList.contains(Peter) + Peter.getAge()); 
System.out.println("list contains Kevin : " + personList.contains(Kevin) + Kevin.getAge()); 

JavaRDD<Person> personRdd = ctx.parallelize(personList); 
personRdd.saveAsObjectFile("hdfs://hadoop-master:8020/Peter/test");  

並最終使用SparkContext「objectFile」API來獲取hdfs實體到RDD。 樣本代碼如下

JavaRDD<Person> getPersonRdd = ctx.objectFile("hdfs://hadoop-master:8020/Peter/test"); 
    DataFrame schemaPeople = sqlContext.createDataFrame(getPersonRdd, Person.class); 
    schemaPeople.registerTempTable("people"); 
    schemaPeople.printSchema(); 
    DataFrame people = sqlContext.sql("select * from people"); 
    people.show();