我有一个人物对象,如下所示:
Person person = new Person();
person.setPersonId("10");
person.setAge(20);
我想使用Spark将其保存在HDFS中。它可以使用spark中的DataFrame类的save方法来完成,如下所示:
dataFrame.save("hdfs://localhost:9000/sample.json");
但我找不到任何方法将实体对象转换为RDD
或DataFrame
有没有办法将实体对象转换为RDD或DataFrame?
答案 0 :(得分:3)
我建议您将Person对象转换为List。 而SparkContext可以使用" parallelize" 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&#34; objectFile&#34; 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();