从嵌套的用户定义对象创建DataFrame

莫希特(Mohit)Manaskant

我正在使用MongoDB-Hadoop连接器读取具有嵌入式文档的集合。

JSON集合:PersonaMetaData

{
    "user_id" : NumberLong(2),
    "persona_created" : true,
    "persona_createdAt" : ISODate("2016-02-24T06:41:49.761Z"),
    "persona" : [{"persona_type" : 1,
            "created_using_algo" : "Name of the algo",
            "version_algo" : "1.0",
            "createdAt" : ISODate("2016-02-24T06:41:49.761Z"),
             "persona_items": {"key1":"value1", "key2": "value2"} }]
}

我创建了以下类来表示集合中的数据

 class Persona_Items implements Serializable
 {
   private int key1;
   private String key2;
   // Getter/Setter and constructor 
 }

 class Persona implements Serializable
 {
   String persona_type;
   String created_using_algo
   String version_algo
   long createdAt;
   List<Persona_Items> listPersonaItems; 
     // Getter/setter and constructor
 }

 class PersonaMetaData implements Serializable
 {
   long user_id;
   boolean persona_created;
   long persona_createdAt;
   List<Persona> listPersona;

   // Getter/setter and constructor 
 }

然后将其用作

 // RDD representing the complete collection
 JavaPairRDD<Object, BSONObject> bsonRdd = sc.newAPIHadoopRDD(inputConfig,
                     com.mongodb.hadoop.MongoInputFormat.class,
                     Object.class, BSONObject.class);

 // Get RDD of PersonaMetaData
 JavaRDD<PersonaMetaData> metaDataSchemaJavaRDD =
 bsonRdd.map(new Function<Tuple2<Object, BSONObject>, PersonaMetaData >() {
                         @Override
                         public PersonaMetaData  call(Tuple2<Object, BSONObject> objectBSONObjectTuple2)
                                 throws Exception { // Parse the BSON object and return a new PersonaMetaData object }

 // Convert into DataFrame

 dataFrame= sqlContext.createDataFrame(metaDataSchemaJavaRDD,
                     PersonaMetaData.class);

例外

scala.MatchError:io.abc.spark.schema.PersonaMetaData @ 31ff5060(io.abc.spark.schema.PersonaMetaData类)位于org.apache.spark.sql.catalyst.CatalystTypeConverters $ StructConverter.toCatalystImpl(CatalyscalTypeI255(io.abc.spark.schema.PersonaMetaData类) )在org.apache.spark.sql.catalyst.CatalystTypeConverters $ CatalystTypeConverter.toCatalyst(102)上的org.apache.spark.sql.catalyst.CatalystTypeConverters $ StructConverter.toCatalystImpl(CatalystTypeConverters.scala:250) apache.spark.sql.catalyst.CatalystTypeConverters $ ArrayConverter.toCatalystImpl(CatalystTypeConverters.scala:169)位于org.apache.spark.sql.catalyst.CatalystTypeConverters $ ArrayConverter.toCatalystImpl(CatalystTypeConverters。 org.apache.spark上的sql.catalyst.CatalystTypeConverters $ CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:102)。sql.catalyst.CatalystTypeConverters $$ anonfun $ createToCatalystConverter $ 2.apply(CatalystTypeConverters.scala:401)at org.apache.spark.sql.SQLContext $$ anonfun $ 9 $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 2。 .scala:500),位于org.apache.spark.sql.SQLContext $$ anonfun $ 9 $$ anonfun $ apply $ 1 $$ anonfun $ apply $ 2.apply(SQLContext.scala:500),位于scala.collection.TraversableLike $$ anonfun $ map $ 1.apply(TraversableLike.scala:244)在scala.collection.TraversableLike $$ anonfun $ map $ 1.apply(TraversableLike.scala:244)在scala.collection.IndexedSeqOptimized $ class.foreach(IndexedSeqOptimized.scala:33)在scala.collection.mutable.ArrayOps $ ofRef.map(ArrayOps。)上的scala.collection.mutable.ArrayOps $ ofRef.foreach(ArrayOps.scala:108)在scala.collection.TraversableLike $ class.map(TraversableLike.scala:244)在scala.collection.mutable.ArrayOps $ ofRef.map(ArrayOps。 scala:108),位于org.apache.spark.sql.SQLContext $$ anonfun $ 9 $$ anonfun $ apply $ 1。在org.apache.spark.sql.SQLContext上应用(SQLContext.scala:500)$$ anonfun $ 9 $$ anonfun $ apply $ 1.apply(SQLContext.scala:498)

类中没有任何列表,运行不会有任何问题。

零323

正如在Spark SQL的使用反射推断架构》一节中明确指出的那样,《 DataFrames and Datasets Guide》

Spark SQL不支持包含嵌套或包含复杂类型(例如列表或数组)的JavaBean。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从嵌套的用户定义对象创建DataFrame

来自分类Dev

创建用户定义的副本构造函数时无法创建对象

来自分类Dev

使用自定义对象创建嵌套的ObservableCollections

来自分类Dev

在python中创建用户定义类的对象集

来自分类Dev

使用用户定义的类型对象创建SafeArray

来自分类Dev

在python中创建用户定义类的对象集

来自分类Dev

如何创建用户定义的类型模板类对象C ++

来自分类Dev

如何使用用户定义的相等函数在Javascript中创建一组用户定义的对象?

来自分类Dev

从CSV创建嵌套对象

来自分类Dev

从对象创建嵌套列表

来自分类Dev

从CSV创建嵌套对象

来自分类Dev

快速创建嵌套对象

来自分类Dev

从嵌套对象创建对象数组

来自分类Dev

Sailsjs创建对象-嵌套创建

来自分类Dev

Sailsjs创建对象-嵌套创建

来自分类Dev

用户输入以创建对象

来自分类Dev

用户输入以创建对象

来自分类Dev

JS-为自定义js对象创建用户定义的函数

来自分类Dev

如何使用嵌套资源在Rails 4中创建与用户关联的对象?

来自分类Dev

如何在以用户定义的类对象作为类成员的Java中创建用户定义的不可变类?

来自分类Dev

如何动态创建嵌套对象?

来自分类Dev

PostgreSQL。创建嵌套的json对象

来自分类Dev

如何动态创建嵌套对象?

来自分类Dev

Scrapy - 创建嵌套的 JSON 对象

来自分类Dev

Automapper 突然创建嵌套对象

来自分类Dev

从DataFrame到嵌套的Json对象

来自分类Dev

从模板对象创建深度嵌套的对象

来自分类Dev

从对象数组创建对象的嵌套数组?

来自分类Dev

创建用户定义的名称变量