我使用的是javaspark,下面是我的代码
JavaRDD<MyComplexEntity> myObjectJavaRDD = resultJavaRDD.flatMap(result -> result.getMyObjects());
DataFrame df = sqlContext.createDataFrame(myObjectJavaRDD, MyComplexEntity.class);
df.saveAsParquetFile("s3a://mybucket/test.parquet");
mycomplexentity.java文件
public MyComplexEntity implements Serializable {
private Identifier identifier;
private boolean isSwitch1True;
private String note;
private java.util.ArrayList<Identifier> secodaryIds;
......
}
标识符.java
public Identifier implements Serializable {
private int id;
private String uuid;
......
}
问题是我从myobjectjavardd创建Dataframe时在第2步失败。如何将复杂java对象列表转换为Dataframe。谢谢
1条答案
按热度按时间izj3ouym1#
不管怎样,你能把它转换成scala吗?
scala支架
case class
在这种情况下对你来说,挑战在于你有一个
Seq/Array
的Inner
案例类as=>private java.util.ArrayList<Identifier> secodaryIds;
所以可以用下面的方法请注意=>
outerval:mycomplexentity包含标识符对象列表,如下所示
outerVal: MyComplexEntity = MyComplexEntity(Hello,List(Identifier(1,gsgsg), Identifier(2,dvggwgwg)))
现在实际的spark方法是使用数据集给我们=>
但如果我们“正确”Map它=>
作为=>
// Second element is a Seq[(Int,String)] and We map it into Seq[Identifier] as x._2.map(y => Identifier(y._1,y._2))
如下所示:我们得到一个类似=>
resultDs: org.apache.spark.sql.Dataset[MyComplexEntity] = [notes: string, identifierArray: array<struct<Id:int,uuid:string>>]
数据如下:使用scala很容易。谢谢。