当前位置:  开发笔记 > 编程语言 > 正文

将Spark DataFrame转换为Pojo对象

如何解决《将SparkDataFrame转换为Pojo对象》经验,为你挑选了1个好方法。

请看下面的代码:

    //Create Spark Context
    SparkConf sparkConf = new SparkConf().setAppName("TestWithObjects").setMaster("local");
    JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
    //Creating RDD
    JavaRDD personsRDD = javaSparkContext.parallelize(persons);
    //Creating SQL context
    SQLContext sQLContext = new SQLContext(javaSparkContext);
    DataFrame personDataFrame = sQLContext.createDataFrame(personsRDD, Person.class);
    personDataFrame.show();
    personDataFrame.printSchema();
    personDataFrame.select("name").show();
    personDataFrame.registerTempTable("peoples");
    DataFrame result = sQLContext.sql("SELECT * FROM peoples WHERE name='test'");
    result.show();

在此之后,我需要将DataFrame - 'result'转换为Person Object或List.提前致谢.



1> 小智..:

DataFrame只是Dataset [Row]的类型别名.与强类型Scala/Java数据集一起提供的"类型转换"相比,这些操作也称为"无类型转换".

从数据集[Row]到Dataset [Person]的转换在spark中非常简单

DataFrame result = sQLContext.sql("SELECT * FROM peoples WHERE name='test'");

此时,Spark将您的数据转换为DataFrame = Dataset [Row],这是一个通用Row对象的集合,因为它不知道确切的类型.

// Create an Encoders for Java beans
Encoder personEncoder = Encoders.bean(Person.class); 
Dataset personDF = result.as(personEncoder);
personDF.show();

现在,Spark转换数据集[Row] - > Dataset [Person]类型特定的Scala/Java JVM对象,由Person类指定.

有关详细信息,请参阅databricks提供的以下链接

https://databricks.com/blog/2016/07/14/a-tale-of-three-apache-spark-apis-rdds-dataframes-and-datasets.html

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有