【发布时间】:2016-06-29 09:50:09
【问题描述】:
我正在使用 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(CatalystTypeConverters.scala:255) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$StructConverter.toCatalystImpl(CatalystTypeConverters.scala:250) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:102) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$ArrayConverter.toCatalystImpl(CatalystTypeConverters.scala:169) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$ArrayConverter.toCatalystImpl(CatalystTypeConverters.scala:153) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$CatalystTypeConverter.toCatalyst(CatalystTypeConverters.scala:102) 在 org.apache.spark.sql.catalyst.CatalystTypeConverters$$anonfun$createToCatalystConverter$2.apply(CatalystTypeConverters.scala:401) 在 org.apache.spark.sql.SQLContext$$anonfun$9$$anonfun$apply$1$$anonfun$apply$2.apply(SQLContext.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.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.apply(SQLContext.scala:500) 在 org.apache.spark.sql.SQLContext$$anonfun$9$$anonfun$apply$1.apply(SQLContext.scala:498)
类中没有任何列表运行没有任何问题。
【问题讨论】:
标签: java mongodb apache-spark dataframe apache-spark-sql