【问题标题】:Persist an entity object to HDFS using spark使用 spark 将实体对象持久化到 HDFS
【发布时间】:2015-09-02 12:03:57
【问题描述】:

我有一个person对象如下图:

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

我想使用 Spark 将其保存在 HDFS 中。可以使用spark中DataFrame类的save方法来完成,如下所示:

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

但我还没有找到任何方法将实体对象转换为RDDDataFrame

有没有办法将实体对象转换为 RDD 或 DataFrame?

【问题讨论】:

    标签: apache-spark hdfs


    【解决方案1】:

    我建议您将 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 "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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多