当前位置: 首页 > 知识库问答 >
问题:

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

公西天逸
2023-03-14

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

{
    "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.sql.catalyst.catalyst.catalysttypeConverters$structconverters.scala:255)在org.apache.spark.sql.catalyst.catalysttypeConverters$structconverters.scala:255)在org.apache.spark.sql.catalyst.catalysttypeConverters spark.sql.catalyst.catalysttypeConverters$arrayConverter.toCatalystimpl(catalysttypeConverters.scala:169)在org.apache.spark.sql.catalyst.catalysttypeConverters$arrayConverters.scala:169)在org.apache.spark.sql.catalyst.catalysttypeConverters$arrayConverters.toCatalystimpl(catalysttypeConverters在org.apache.spark.sql.sqlcontext$$anonfun$9$$anonfun$applic$1$$anonfun$applic$2..applic(sqlcontext.scala:500)在org.apache.spark.sql.sqlcontext$$anonfun$applic$9$$anonfun$applic$1$anonfun$applic$2.applic(sqlcontext.scala:500)在scala.collection.traversablelike$$anonfun$map$1.applic(sqlcontext.scala:244)在.scala:33)在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)在

类中没有任何列表运行时不会出现任何问题。

共有1个答案

平和雅
2023-03-14

正如在Spark SQL的使用反射推断模式一节中所明确指出的,数据规则和数据集指南(DataFrames and Datasets Guide)

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

 类似资料:
  • 问题内容: 我不太使用php,并且在对象创建方面有些模糊。我需要发出一个发送json的网络服务请求,我想我已经覆盖了那部分。在提交数据之前,我需要创建一个嵌套对象。根据我对基于ecma的脚本语言的经验,我认为这是微不足道的,但是我发现该语法难以导航。我要创建的对象如下。 我已经看到了许多平面对象的示例,但是还没有找到嵌套对象的最小示例。上面对象的php语法是什么?这是在PHP中做的不寻常的事情吗?

  • 问题内容: 我正在尝试从JSON创建嵌套的UL。我能够遍历并从对象中获取数据,但是在构建嵌套UL时遇到了麻烦。我认为’.append’方法放置在错误的位置。生成的LI都分组在一起。我如何创建一个循环(或者也可以用另一种方法)来构建带有正确嵌套的子菜单LI的UL?我曾尝试使用其他类似的帖子来解决我的问题,但是我的数据和代码似乎没有任何意义。对此有些不解之举- 我尝试了几种方法来创建此动态列表,但到目

  • 问题内容: 如何将JSON传递到RAILS应用程序,以便它将以has_many关系创建嵌套的子对象? 这是我到目前为止的内容: 两个模型对象。 使用通勤,我可以设置标准控制器。我希望能够使用JSON在一个REST调用中创建一个Commute对象以及几个子Location对象。我一直在尝试这样的事情: 更具可读性的JSON是: 执行该命令时,将得到以下输出: 看起来好像正在读取JSON数组的loca

  • 我将一些数据建模为一组简单的嵌套c#对象,我正试图使用。Net Neo4jClient。 我的课程形式如下: 一旦数据以正确的形式存储在数据库中: 我可以使用collect和optional match,通过以下查询将数据检索到我的类结构中: 这一切都非常有效,数据被正确地序列化到适当的类中。 我的问题是我应该如何执行相反的操作? 在给定的一个Foo类中,包含多个嵌套的bar和baz类,我可以在一

  • 本文向大家介绍PHP 中如何创建嵌套 JSON 对象,包括了PHP 中如何创建嵌套 JSON 对象的使用技巧和注意事项,需要的朋友参考一下 JSON结构可以使用以下代码创建-

  • 问题内容: 我有一个其中嵌套了数据类对象的数据类对象。但是,当我创建主对象时,嵌套的对象会变成字典: 如您所见,我试图将所有数据作为字典传递,但没有得到预期的结果。然后,我尝试先构造嵌套对象,然后将其传递给对象构造函数,但得到的结果相同。 理想情况下,我想构造我的对象以获得以下内容: 除了在访问对象属性时手动将嵌套字典转换为相应的数据类对象之外,还有什么方法可以实现? 提前致谢。 问题答案: 这是